< prev index next >


Print this page


@@ -77,19 +77,26 @@
   static ClassLoaderData* _unloading;
   // CMS support.
   static ClassLoaderData* _saved_head;
   static ClassLoaderData* _saved_unloading;
   static bool _should_purge;
+  // Set if there's anything to purge in the deallocate lists or previous versions
+  // during a safepoint after class unloading in a full GC.
+  static bool _should_clean_deallocate_lists;
+  static bool _safepoint_cleanup_needed;
   // OOM has been seen in metaspace allocation. Used to prevent some
   // allocations until class unloading
   static bool _metaspace_oom;
   static volatile size_t  _num_instance_classes;
   static volatile size_t  _num_array_classes;
   static ClassLoaderData* add_to_graph(Handle class_loader, bool anonymous);
   static ClassLoaderData* add(Handle class_loader, bool anonymous);
   static ClassLoaderData* find_or_create(Handle class_loader);
   static void purge();
   static void clear_claimed_marks();
   // oops do

@@ -114,11 +121,17 @@
   static void modules_unloading_do(void f(ModuleEntry*));
   static void packages_do(void f(PackageEntry*));
   static void packages_unloading_do(void f(PackageEntry*));
   static void loaded_classes_do(KlassClosure* klass_closure);
   static void classes_unloading_do(void f(Klass* const));
-  static bool do_unloading(bool clean_previous_versions);
+  static bool do_unloading(bool do_cleaning);
+  // Expose state to avoid logging overhead in safepoint cleanup tasks.
+  static inline bool should_clean_metaspaces();
+  static void set_should_clean_deallocate_lists() { _should_clean_deallocate_lists = true; }
+  static void clean_deallocate_lists(bool purge_previous_versions);
+  static void walk_metadata_and_clean_metaspaces();
   // dictionary do
   // Iterate over all klasses in dictionary, but
   // just the classes from defining class loaders.
   static void dictionary_classes_do(void f(InstanceKlass*));

@@ -296,11 +309,11 @@
   void modules_do(void f(ModuleEntry*));
   void packages_do(void f(PackageEntry*));
   // Deallocate free list during class unloading.
   void free_deallocate_list();      // for the classes that are not unloaded
-  void unload_deallocate_list();    // for the classes that are unloaded
+  void free_deallocate_list_C_heap_structures();    // for the classes that are unloaded
   // Allocate out of this class loader data
   MetaWord* allocate(size_t size);
   Dictionary* create_dictionary();
< prev index next >