< prev index next >
src/hotspot/share/ci/ciInstanceKlass.cpp
Print this page
@@ -61,27 +61,28 @@
_init_state = ik->init_state();
_nonstatic_field_size = ik->nonstatic_field_size();
_has_nonstatic_fields = ik->has_nonstatic_fields();
_has_nonstatic_concrete_methods = ik->has_nonstatic_concrete_methods();
_is_unsafe_anonymous = ik->is_unsafe_anonymous();
+ _is_hidden = ik->is_hidden();
_nonstatic_fields = NULL; // initialized lazily by compute_nonstatic_fields:
_has_injected_fields = -1;
_implementor = NULL; // we will fill these lazily
// Ensure that the metadata wrapped by the ciMetadata is kept alive by GC.
// This is primarily useful for metadata which is considered as weak roots
// by the GC but need to be strong roots if reachable from a current compilation.
// InstanceKlass are created for both weak and strong metadata. Ensuring this metadata
// alive covers the cases where there are weak roots without performance cost.
oop holder = ik->klass_holder();
- if (ik->is_unsafe_anonymous()) {
+ if (ik->class_loader_data()->is_shortlived()) {
// Though ciInstanceKlass records class loader oop, it's not enough to keep
- // VM unsafe anonymous classes alive (loader == NULL). Klass holder should
+ // VM weak hidden and unsafe anonymous classes alive (loader == NULL). Klass holder should
// be used instead. It is enough to record a ciObject, since cached elements are never removed
// during ciObjectFactory lifetime. ciObjectFactory itself is created for
// every compilation and lives for the whole duration of the compilation.
- assert(holder != NULL, "holder of unsafe anonymous class is the mirror which is never null");
+ assert(holder != NULL, "holder of hidden or unsafe anonymous class is the mirror which is never null");
(void)CURRENT_ENV->get_object(holder);
}
Thread *thread = Thread::current();
if (ciObjectFactory::is_initialized()) {
@@ -121,10 +122,11 @@
_nonstatic_field_size = -1;
_has_nonstatic_fields = false;
_nonstatic_fields = NULL;
_has_injected_fields = -1;
_is_unsafe_anonymous = false;
+ _is_hidden = false;
_loader = loader;
_protection_domain = protection_domain;
_is_shared = false;
_super = NULL;
_java_mirror = NULL;
< prev index next >