< prev index next >

src/hotspot/share/classfile/classLoaderData.hpp

Print this page

        

@@ -28,10 +28,11 @@
 #include "memory/allocation.hpp"
 #include "memory/memRegion.hpp"
 #include "memory/metaspace.hpp"
 #include "memory/metaspaceCounters.hpp"
 #include "oops/oopHandle.hpp"
+#include "oops/weakHandle.hpp"
 #include "runtime/mutex.hpp"
 #include "trace/traceMacros.hpp"
 #include "utilities/growableArray.hpp"
 #include "utilities/macros.hpp"
 #if INCLUDE_TRACE

@@ -111,11 +112,11 @@
   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(BoolObjectClosure* is_alive, bool clean_previous_versions);
+  static bool do_unloading(BoolObjectClosure* is_alive_closure, bool clean_previous_versions);
 
   // dictionary do
   // Iterate over all klasses in dictionary, but
   // just the classes from defining class loaders.
   static void dictionary_classes_do(void f(InstanceKlass*));

@@ -217,10 +218,11 @@
   friend class MetaDataFactory;
   friend class Method;
 
   static ClassLoaderData * _the_null_class_loader_data;
 
+  WeakHandle _holder;         // The oop that determines lifetime of this class loader
   oop _class_loader;          // oop used to uniquely identify a class loader
                               // class loader or a canonical class path
 
   ClassLoaderMetaspace * volatile _metaspace;  // Meta-space where meta-data defined by the
                                     // classes in the class loader are allocated.

@@ -306,11 +308,11 @@
   // GC interface.
   void clear_claimed() { _claimed = 0; }
   bool claimed() const { return _claimed == 1; }
   bool claim();
 
-  bool is_alive(BoolObjectClosure* is_alive_closure) const;
+  bool is_alive() const;
 
   // Accessors
   ClassLoaderMetaspace* metaspace_or_null() const { return _metaspace; }
 
   static ClassLoaderData* the_null_class_loader_data() {

@@ -362,10 +364,12 @@
   // Used to refcount an anonymous class's CLD in order to
   // indicate their aliveness without a keep_alive_object().
   void inc_keep_alive();
   void dec_keep_alive();
 
+  void update_holder(Handle holder);
+
   inline unsigned int identity_hash() const { return (unsigned int)(((intptr_t)this) >> 3); }
 
   void oops_do(OopClosure* f, bool must_claim, bool clear_modified_oops = false);
 
   void classes_do(KlassClosure* klass_closure);
< prev index next >