RFR: 8209971: TestOptionsWithRanges.java crashes in CDS mode with G1UpdateBufferSize=1
jiangli.zhou at oracle.com
Thu Sep 6 02:58:20 UTC 2018
Please review the following fix for JDK-8209971,
TestOptionsWithRanges.java crashes in CDS mode with G1UpdateBufferSize=1.
This is a pre-existing issue that's exposed when archived heap object
relocation is enabled. At CDS runtime, the archived heap regions are
mapped back to the runtime java heap. As the mapped heap data may not
occupy the entire runtime GC region(s), the empty spaces within the
regions are filled with dummy objects, which is done by a fixup process
after mapping the data. The fixup was done after
SystemDictionary::initialize(), because fixup needs to access
SystemDictionary::Object_klass() (in some cases). However that is too
late as archived java objects are accessed when
SystemDictionary::initialize() resolves well-known classes.
The solution is to call MetaspaceShared::fixup_mapped_heap_regions() at
an earlier time. In the webre, the call is moved into
SystemDictionary::resolve_preloaded_classes(). It's called after
before any of the archived java objects is accessed. No mirror object is
Archived mirrors are restored after java.lang.Class is loaded.
Tested TestOptionsWithRanges.java locally in CDS mode. Tier1 - tier5
normal runs and tier1 - tier4 default CDS runs are in progress.
More information about the hotspot-runtime-dev