< prev index next >

src/hotspot/share/oops/instanceMirrorKlass.inline.hpp

Print this page

        

*** 49,62 **** if (Devirtualizer::do_metadata(closure)) { Klass* klass = java_lang_Class::as_Klass_raw(obj); // We'll get NULL for primitive mirrors. if (klass != NULL) { ! if (klass->is_instance_klass() && ! InstanceKlass::cast(klass)->is_unsafe_anonymous()) { ! // An unsafe anonymous class doesn't have its own class loader, so ! // when handling the java mirror for the class we need to make sure its class // loader data is claimed, this is done by calling do_cld explicitly. // For non-anonymous classes the call to do_cld is made when the class // loader itself is handled. Devirtualizer::do_cld(closure, klass->class_loader_data()); } else { --- 49,61 ---- if (Devirtualizer::do_metadata(closure)) { Klass* klass = java_lang_Class::as_Klass_raw(obj); // We'll get NULL for primitive mirrors. if (klass != NULL) { ! if (klass->is_instance_klass() && klass->class_loader_data()->is_shortlived()) { ! // A weak hidden or an unsafe anonymous class doesn't have its own class loader, ! // so when handling the java mirror for the class we need to make sure its class // loader data is claimed, this is done by calling do_cld explicitly. // For non-anonymous classes the call to do_cld is made when the class // loader itself is handled. Devirtualizer::do_cld(closure, klass->class_loader_data()); } else {
< prev index next >