< prev index next >

src/share/vm/ci/ciInstanceKlass.hpp

Print this page
rev 12906 : [mq]: gc_interface

@@ -42,10 +42,11 @@
   friend class ciExceptionHandler;
   friend class ciMethod;
   friend class ciField;
 
 private:
+  jobject                _holder;
   jobject                _loader;
   jobject                _protection_domain;
 
   InstanceKlass::ClassState _init_state;           // state of class
   bool                   _is_shared;

@@ -76,16 +77,22 @@
   void compute_injected_fields();
   bool compute_injected_fields_helper();
 
 protected:
   ciInstanceKlass(Klass* k);
-  ciInstanceKlass(ciSymbol* name, jobject loader, jobject protection_domain);
+  ciInstanceKlass(ciSymbol* name, jobject holder, jobject loader, jobject protection_domain);
 
   InstanceKlass* get_instanceKlass() const {
     return InstanceKlass::cast(get_Klass());
   }
 
+  // Hold metadata from unloading by keeping its holder alive.
+  // Though ciInstanceKlass records class loader oop, it's not enough to keep
+  // VM anonymous classes alive (loader == NULL). Klass holder should be used instead.
+  oop holder();
+  jobject holder_handle();
+
   oop loader();
   jobject loader_handle();
 
   oop protection_domain();
   jobject protection_domain_handle();
< prev index next >