open Udiff src/hotspot/share/classfile/classLoaderData.cpp (original) (raw)
rev 49873 : 8199712: Flight Recorder Reviewed-by:
@@ -74,12 +74,15 @@ #include "runtime/safepoint.hpp" #include "runtime/safepointVerifiers.hpp" #include "utilities/growableArray.hpp" #include "utilities/macros.hpp" #include "utilities/ostream.hpp" -#if INCLUDE_TRACE -#include "trace/tracing.hpp" +#if INCLUDE_JFR +#include "jfr/jfr.hpp" +#include "jfr/jfrEvent.hpp" +#include "jfr/jfrMacros.hpp" +#include "utilities/ticks.hpp" #endif volatile size_t ClassLoaderDataGraph::_num_array_classes = 0; volatile size_t ClassLoaderDataGraph::_num_instance_classes = 0;
@@ -159,11 +162,11 @@ _dictionary = create_dictionary(); }
NOT_PRODUCT(_dependency_count = 0); // number of class loader dependencies
- TRACE_INIT_ID(this);
- JFR_INIT_ID(this); }
ClassLoaderData::ChunkedHandleList::~ChunkedHandleList() { Chunk* c = _head; while (c != NULL) {
@@ -1274,10 +1277,32 @@ return false; } #endif // PRODUCT +#if INCLUDE_JFR +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 (Jfr::is_enabled()) { + if (EventClassUnload::is_enabled()) { + class_unload_time = Ticks::now(); + ClassLoaderDataGraph::classes_unloading_do(&post_class_unload_event); + } + Jfr::on_unloading_classes(); + } +} +#endif // INCLUDE_JFR // Move class loader data from main list to the unloaded list for unloading // and deallocation later. bool ClassLoaderDataGraph::do_unloading(bool clean_previous_versions) {
@@ -1351,12 +1376,11 @@ if (data->modules_defined()) { data->modules()->purge_all_module_reads(); } data = data->next(); }
- post_class_unload_events();
- JFR_ONLY(post_class_unload_events();)
}
log_debug(class, loader, data)("do_unloading: loaders processed %u, loaders removed %u", loaders_processed, loaders_removed);
return seen_dead_loader;
@@ -1391,24 +1415,10 @@ } } return resized; } -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 -}
ClassLoaderDataGraphKlassIteratorAtomic::ClassLoaderDataGraphKlassIteratorAtomic() : _next_klass(NULL) { ClassLoaderData* cld = ClassLoaderDataGraph::_head; Klass* klass = NULL;
@@ -1488,22 +1498,5 @@ for (ClassLoaderData* data = _head; data != NULL; data = data->next()) { data->print_on(out); } } #endif // PRODUCT
-#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