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 ----