--- a/src/hotspot/share/classfile/javaClasses.cpp Fri Sep 07 14:44:52 2018 -0400
+++ b/src/hotspot/share/classfile/javaClasses.cpp Fri Sep 07 15:18:14 2018 -0400
@@ -1213,6 +1213,14 @@
bool java_lang_Class::restore_archived_mirror(Klass *k,
Handle class_loader, Handle module,
Handle protection_domain, TRAPS) {
+ // Postpone restoring archived mirror until java.lang.Class is loaded. Please
+ // see more details in SystemDictionary::resolve_preloaded_classes().
+ if (!SystemDictionary::Class_klass_loaded()) {
+ assert(fixup_mirror_list() != NULL, "fixup_mirror_list not initialized");
+ fixup_mirror_list()->push(k);
+ return true;
+ }
+
oop m = MetaspaceShared::materialize_archived_object(k->archived_java_mirror_raw_narrow());
if (m == NULL) {
@@ -1225,10 +1233,6 @@
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