@@ -560,15 +560,6 @@ static InstanceKlass* handle_parallel_loading(JavaThread* current,
560560 return nullptr ;
561561}
562562
563- void SystemDictionary::post_class_load_event (EventClassLoad* event, const InstanceKlass* k, const ClassLoaderData* init_cld) {
564- assert (event != nullptr , " invariant" );
565- assert (k != nullptr , " invariant" );
566- event->set_loadedClass (k);
567- event->set_definingClassLoader (k->class_loader_data ());
568- event->set_initiatingClassLoader (init_cld);
569- event->commit ();
570- }
571-
572563// SystemDictionary::resolve_instance_class_or_null is the main function for class name resolution.
573564// After checking if the InstanceKlass already exists, it checks for ClassCircularityError and
574565// whether the thread must wait for loading in parallel. It eventually calls load_instance_class,
@@ -582,7 +573,7 @@ InstanceKlass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
582573 assert (name != nullptr && !Signature::is_array (name) &&
583574 !Signature::has_envelope (name), " invalid class name: %s" , name == nullptr ? " nullptr" : name->as_C_string ());
584575
585- EventClassLoad class_load_start_event ;
576+ EventClassLoad class_load_event ;
586577
587578 HandleMark hm (THREAD);
588579
@@ -713,8 +704,8 @@ InstanceKlass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
713704 return nullptr ;
714705 }
715706
716- if (class_load_start_event .should_commit ()) {
717- post_class_load_event (&class_load_start_event , loaded_class, loader_data);
707+ if (class_load_event .should_commit ()) {
708+ JFR_ONLY ( post_class_load_event (&class_load_event , loaded_class, loader_data);)
718709 }
719710
720711 // Make sure we have the right class in the dictionary
@@ -789,7 +780,7 @@ InstanceKlass* SystemDictionary::resolve_hidden_class_from_stream(
789780 const ClassLoadInfo& cl_info,
790781 TRAPS) {
791782
792- EventClassLoad class_load_start_event ;
783+ EventClassLoad class_load_event ;
793784 ClassLoaderData* loader_data;
794785
795786 // - for hidden classes that are not strong: create a new CLD that has a class holder and
@@ -819,15 +810,16 @@ InstanceKlass* SystemDictionary::resolve_hidden_class_from_stream(
819810 k->add_to_hierarchy (THREAD);
820811 // But, do not add to dictionary.
821812
813+ if (class_load_event.should_commit ()) {
814+ JFR_ONLY (post_class_load_event (&class_load_event, k, loader_data);)
815+ }
816+
822817 k->link_class (CHECK_NULL);
823818
824819 // notify jvmti
825820 if (JvmtiExport::should_post_class_load ()) {
826821 JvmtiExport::post_class_load (THREAD, k);
827822 }
828- if (class_load_start_event.should_commit ()) {
829- post_class_load_event (&class_load_start_event, k, loader_data);
830- }
831823
832824 return k;
833825}
@@ -1154,6 +1146,17 @@ void SystemDictionary::load_shared_class_misc(InstanceKlass* ik, ClassLoaderData
11541146 }
11551147}
11561148
1149+ #if INCLUDE_JFR
1150+ void SystemDictionary::post_class_load_event (EventClassLoad* event, const InstanceKlass* k, const ClassLoaderData* init_cld) {
1151+ assert (event != nullptr , " invariant" );
1152+ assert (k != nullptr , " invariant" );
1153+ event->set_loadedClass (k);
1154+ event->set_definingClassLoader (k->class_loader_data ());
1155+ event->set_initiatingClassLoader (init_cld);
1156+ event->commit ();
1157+ }
1158+ #endif // INCLUDE_JFR
1159+
11571160// This is much more lightweight than SystemDictionary::resolve_or_null
11581161// - There's only a single Java thread at this point. No need for placeholder.
11591162// - All supertypes of ik have been loaded
@@ -1182,6 +1185,8 @@ void SystemDictionary::preload_class(Handle class_loader, InstanceKlass* ik, TRA
11821185 }
11831186#endif
11841187
1188+ EventClassLoad class_load_event;
1189+
11851190 ClassLoaderData* loader_data = ClassLoaderData::class_loader_data (class_loader ());
11861191 oop java_mirror = ik->archived_java_mirror ();
11871192 precond (java_mirror != nullptr );
@@ -1203,6 +1208,10 @@ void SystemDictionary::preload_class(Handle class_loader, InstanceKlass* ik, TRA
12031208 update_dictionary (THREAD, ik, loader_data);
12041209 }
12051210
1211+ if (class_load_event.should_commit ()) {
1212+ JFR_ONLY (post_class_load_event (&class_load_event, ik, loader_data);)
1213+ }
1214+
12061215 assert (ik->is_loaded (), " Must be in at least loaded state" );
12071216}
12081217
@@ -1380,15 +1389,6 @@ InstanceKlass* SystemDictionary::load_instance_class(Symbol* name,
13801389 return loaded_class;
13811390}
13821391
1383- static void post_class_define_event (InstanceKlass* k, const ClassLoaderData* def_cld) {
1384- EventClassDefine event;
1385- if (event.should_commit ()) {
1386- event.set_definedClass (k);
1387- event.set_definingClassLoader (def_cld);
1388- event.commit ();
1389- }
1390- }
1391-
13921392void SystemDictionary::define_instance_class (InstanceKlass* k, Handle class_loader, TRAPS) {
13931393
13941394 ClassLoaderData* loader_data = k->class_loader_data ();
@@ -1440,7 +1440,6 @@ void SystemDictionary::define_instance_class(InstanceKlass* k, Handle class_load
14401440 if (JvmtiExport::should_post_class_load ()) {
14411441 JvmtiExport::post_class_load (THREAD, k);
14421442 }
1443- post_class_define_event (k, loader_data);
14441443}
14451444
14461445// Support parallel classloading
0 commit comments