< prev index next >

src/hotspot/share/classfile/javaClasses.cpp

Print this page
rev 50453 : imported patch 02.removeInArchiveRoot
rev 50454 : imported patch cleanups

*** 61,71 **** #include "runtime/safepointVerifiers.hpp" #include "runtime/thread.inline.hpp" #include "runtime/vframe.inline.hpp" #include "utilities/align.hpp" #include "utilities/preserveException.hpp" - #if INCLUDE_JVMCI #include "jvmci/jvmciJavaClasses.hpp" #endif #define INJECTED_FIELD_COMPUTE_OFFSET(klass, name, signature, may_be_java) \ --- 61,70 ----
*** 807,822 **** } } if (k->is_shared() && k->has_raw_archived_mirror()) { if (MetaspaceShared::open_archive_heap_region_mapped()) { ! oop m = k->archived_java_mirror(); ! assert(m != NULL, "archived mirror is NULL"); ! assert(MetaspaceShared::is_archive_object(m), "must be archived mirror object"); ! Handle m_h(THREAD, m); ! // restore_archived_mirror() clears the klass' _has_raw_archived_mirror flag ! restore_archived_mirror(k, m_h, Handle(), Handle(), Handle(), CHECK); return; } else { k->set_java_mirror_handle(NULL); k->clear_has_raw_archived_mirror(); } --- 806,817 ---- } } if (k->is_shared() && k->has_raw_archived_mirror()) { if (MetaspaceShared::open_archive_heap_region_mapped()) { ! bool present = restore_archived_mirror(k, Handle(), Handle(), Handle(), CHECK); ! assert(present, "Missing archived mirror for %s", k->external_name()); return; } else { k->set_java_mirror_handle(NULL); k->clear_has_raw_archived_mirror(); }
*** 1205,1229 **** archived_mirror->metadata_field_put(_array_klass_offset, reloc_arr); } return archived_mirror; } ! // After the archived mirror object is restored, the shared klass' ! // _has_raw_archived_mirror flag is cleared ! void java_lang_Class::restore_archived_mirror(Klass *k, Handle mirror, Handle class_loader, Handle module, Handle protection_domain, TRAPS) { // The java.lang.Class field offsets were archived and reloaded from archive. // No need to put classes on the fixup_mirror_list before java.lang.Class // is loaded. if (!k->is_array_klass()) { // - local static final fields with initial values were initialized at dump time // create the init_lock ! typeArrayOop r = oopFactory::new_typeArray(T_INT, 0, CHECK); set_init_lock(mirror(), r); if (protection_domain.not_null()) { set_protection_domain(mirror(), protection_domain()); } --- 1200,1236 ---- archived_mirror->metadata_field_put(_array_klass_offset, reloc_arr); } return archived_mirror; } ! // Returns true if the mirror is updated, false if no archived mirror ! // data is present. After the archived mirror object is restored, the ! // shared klass' _has_raw_archived_mirror flag is cleared. ! bool java_lang_Class::restore_archived_mirror(Klass *k, Handle class_loader, Handle module, Handle protection_domain, TRAPS) { + oop m = MetaspaceShared::unarchive_heap_object(k->archived_java_mirror_raw()); + + if (m == NULL) { + return false; + } + + log_debug(cds, mirror)("Archived mirror is: " PTR_FORMAT, p2i(m)); + + // mirror is archived, restore + assert(MetaspaceShared::is_archive_object(m), "must be archived mirror object"); + Handle mirror(THREAD, m); // The java.lang.Class field offsets were archived and reloaded from archive. // No need to put classes on the fixup_mirror_list before java.lang.Class // is loaded. if (!k->is_array_klass()) { // - local static final fields with initial values were initialized at dump time // create the init_lock ! typeArrayOop r = oopFactory::new_typeArray(T_INT, 0, CHECK_(false)); set_init_lock(mirror(), r); if (protection_domain.not_null()) { set_protection_domain(mirror(), protection_domain()); }
*** 1239,1248 **** --- 1246,1257 ---- set_mirror_module_field(k, mirror, module, THREAD); ResourceMark rm; log_trace(cds, mirror)("Restored %s archived mirror " PTR_FORMAT, k->external_name(), p2i(mirror())); + + return true; } #endif // INCLUDE_CDS_JAVA_HEAP void java_lang_Class::fixup_module_field(Klass* k, Handle module) { assert(_module_offset != 0, "must have been computed already");
< prev index next >