< 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 >