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,82 ****
--- 73,83 ----
#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,1025 ****
--- 1017,1050 ----
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,1096 ****
data->modules()->purge_all_module_reads();
}
data = data->next();
}
! post_class_unload_events();
}
return seen_dead_loader;
}
--- 1111,1121 ----
data->modules()->purge_all_module_reads();
}
data = data->next();
}
! TRACE_ONLY(post_class_unload_events();)
}
return seen_dead_loader;
}
*** 1110,1133 ****
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.
--- 1135,1144 ----
*** 1247,1268 ****
} 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
--- 1258,1262 ----