< prev index next >

src/hotspot/share/classfile/systemDictionary.cpp

Print this page

        

@@ -45,10 +45,11 @@
 #include "compiler/compileBroker.hpp"
 #include "gc/shared/gcTraceTime.inline.hpp"
 #include "gc/shared/oopStorage.inline.hpp"
 #include "interpreter/bytecodeStream.hpp"
 #include "interpreter/interpreter.hpp"
+#include "jfr/jfr.hpp"
 #include "jfr/jfrEvents.hpp"
 #include "logging/log.hpp"
 #include "logging/logStream.hpp"
 #include "memory/filemap.hpp"
 #include "memory/metaspaceClosure.hpp"

@@ -81,10 +82,11 @@
 #include "runtime/signature.hpp"
 #include "services/classLoadingService.hpp"
 #include "services/diagnosticCommand.hpp"
 #include "services/threadService.hpp"
 #include "utilities/macros.hpp"
+#include "utilities/ticks.hpp"
 #if INCLUDE_CDS
 #include "classfile/systemDictionaryShared.hpp"
 #endif
 #if INCLUDE_JVMCI
 #include "jvmci/jvmciRuntime.hpp"

@@ -1849,14 +1851,26 @@
 
   bool unloading_occurred;
   {
     GCTraceTime(Debug, gc, phases) t("ClassLoaderData", gc_timer);
 
+#if INCLUDE_JFR
+    // If unloading occurs, make sure time stamp is consistent.
+    if (Jfr::is_enabled()) {
+      InstanceKlass::set_class_unload_time(Ticks::now());
+    }
+#endif
+
     // First, mark for unload all ClassLoaderData referencing a dead class loader.
     unloading_occurred = ClassLoaderDataGraph::do_unloading(do_cleaning);
     if (unloading_occurred) {
       ClassLoaderDataGraph::clean_module_and_package_info();
+#if INCLUDE_JFR
+      if (Jfr::is_enabled()) {
+        Jfr::on_unloading_classes();
+      }
+#endif
     }
   }
 
   // TODO: just return if !unloading_occurred.
   if (unloading_occurred) {
< prev index next >