src/share/vm/classfile/classLoaderData.cpp

Print this page
rev 13113 : 8182651: Add TRACE_ONLY conditional macro to support more fine-grained INCLUDE_TRACE programming
Reviewed-by:

@@ -73,10 +73,11 @@
 #include "utilities/growableArray.hpp"
 #include "utilities/macros.hpp"
 #include "utilities/ostream.hpp"
 #if INCLUDE_TRACE
 #include "trace/tracing.hpp"
+#include "utilities/ticks.hpp"
 #endif
 
 // helper function to avoid in-line casts
 template <typename T> static T* load_ptr_acquire(T* volatile *p) {
   return static_cast<T*>(OrderAccess::load_ptr_acquire(p));

@@ -1016,10 +1017,34 @@
 
   return false;
 }
 #endif // PRODUCT
 
+#if INCLUDE_TRACE
+static Ticks class_unload_time;
+
+static void post_class_unload_event(Klass* const k) {
+  assert(k != NULL, "invariant");
+  EventClassUnload event(UNTIMED);
+  event.set_endtime(class_unload_time);
+  event.set_unloadedClass(k);
+  event.set_definingClassLoader(k->class_loader_data());
+  event.commit();
+}
+
+static void post_class_unload_events() {
+  assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
+  if (Tracing::enabled()) {
+    if (Tracing::is_event_enabled(TraceClassUnloadEvent)) {
+      class_unload_time = Ticks::now();
+      ClassLoaderDataGraph::classes_unloading_do(&post_class_unload_event);
+    }
+    Tracing::on_unloading_classes();
+  }
+}
+
+#endif // INCLUDE_TRACE
 
 // Move class loader data from main list to the unloaded list for unloading
 // and deallocation later.
 bool ClassLoaderDataGraph::do_unloading(BoolObjectClosure* is_alive_closure,
                                         bool clean_previous_versions) {

@@ -1086,11 +1111,11 @@
         data->modules()->purge_all_module_reads();
       }
       data = data->next();
     }
 
-    post_class_unload_events();
+    TRACE_ONLY(post_class_unload_events();)
   }
 
   return seen_dead_loader;
 }
 

@@ -1110,24 +1135,10 @@
     Metaspace::purge();
     set_metaspace_oom(false);
   }
 }
 
-void ClassLoaderDataGraph::post_class_unload_events() {
-#if INCLUDE_TRACE
-  assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
-  if (Tracing::enabled()) {
-    if (Tracing::is_event_enabled(TraceClassUnloadEvent)) {
-      assert(_unloading != NULL, "need class loader data unload list!");
-      _class_unload_time = Ticks::now();
-      classes_unloading_do(&class_unload_event);
-    }
-    Tracing::on_unloading_classes();
-  }
-#endif
-}
-
 // CDS support
 
 // Global metaspaces for writing information to the shared archive.  When
 // application CDS is supported, we may need one per metaspace, so this
 // sort of looks like it.

@@ -1247,22 +1258,5 @@
   } else {
     out->print("class loader " INTPTR_FORMAT " ", p2i(this));
     class_loader()->print_value_on(out);
   }
 }
-
-#if INCLUDE_TRACE
-
-Ticks ClassLoaderDataGraph::_class_unload_time;
-
-void ClassLoaderDataGraph::class_unload_event(Klass* const k) {
-  assert(k != NULL, "invariant");
-
-  // post class unload event
-  EventClassUnload event(UNTIMED);
-  event.set_endtime(_class_unload_time);
-  event.set_unloadedClass(k);
-  event.set_definingClassLoader(k->class_loader_data());
-  event.commit();
-}
-
-#endif // INCLUDE_TRACE