diff -r d4e7ccaf1445 -r 1512d88b24c6 src/hotspot/share/oops/instanceKlass.cpp --- a/src/hotspot/share/oops/instanceKlass.cpp Fri May 17 10:48:02 2019 -0400 +++ b/src/hotspot/share/oops/instanceKlass.cpp Fri May 17 08:29:55 2019 -0700 @@ -451,7 +451,7 @@ assert(is_instance_klass(), "is layout incorrect?"); assert(size_helper() == parser.layout_size(), "incorrect size_helper?"); - if (DumpSharedSpaces) { + if (DumpSharedSpaces || DynamicDumpSharedSpaces) { SystemDictionaryShared::init_dumptime_info(this); } } @@ -601,7 +601,7 @@ } set_annotations(NULL); - if (DumpSharedSpaces) { + if (DumpSharedSpaces || DynamicDumpSharedSpaces) { SystemDictionaryShared::remove_dumptime_info(this); } } @@ -2225,8 +2225,8 @@ // (1) We are running AOT to generate a shared library. return true; } - if (DumpSharedSpaces) { - // (2) We are running -Xshare:dump to create a shared archive + if (DumpSharedSpaces || DynamicDumpSharedSpaces) { + // (2) We are running -Xshare:dump or -XX:ArchiveClassesAtExit to create a shared archive return true; } if (UseAOT && is_unsafe_anonymous) { @@ -2346,15 +2346,13 @@ array_klasses()->remove_unshareable_info(); } - // These are not allocated from metaspace, but they should should all be empty - // during dump time, so we don't need to worry about them in InstanceKlass::iterate(). - guarantee(_source_debug_extension == NULL, "must be"); - guarantee(_dep_context == NULL, "must be"); - guarantee(_osr_nmethods_head == NULL, "must be"); - + // These are not allocated from metaspace. They are safe to set to NULL. + _source_debug_extension = NULL; + _dep_context = NULL; + _osr_nmethods_head = NULL; #if INCLUDE_JVMTI - guarantee(_breakpoints == NULL, "must be"); - guarantee(_previous_versions == NULL, "must be"); + _breakpoints = NULL; + _previous_versions = NULL; _cached_class_file = NULL; #endif @@ -2475,6 +2473,10 @@ // notify ClassLoadingService of class unload ClassLoadingService::notify_class_unloaded(ik); + if (DumpSharedSpaces || DynamicDumpSharedSpaces) { + SystemDictionaryShared::remove_dumptime_info(ik); + } + if (log_is_enabled(Info, class, unload)) { ResourceMark rm; log_info(class, unload)("unloading class %s " INTPTR_FORMAT, ik->external_name(), p2i(ik)); @@ -3422,7 +3424,12 @@ info_stream.print(" source: %s", class_loader->klass()->external_name()); } } else { - info_stream.print(" source: shared objects file"); + assert(this->is_shared(), "must be"); + if (MetaspaceShared::is_shared_dynamic((void*)this)) { + info_stream.print(" source: shared objects file (top)"); + } else { + info_stream.print(" source: shared objects file"); + } } msg.info("%s", info_stream.as_string());