There are a few things that should be cleaned up in this version of metaspaceShared.cpp
http://hg.openjdk.java.net/jdk9/hs-rt/hotspot/file/8c188166869d/src/share/vm/memory/metaspaceShared.cpp
[1] The "md" and "mc" spaces are managed inside VM_PopulateDumpSharedSpace, which makes the implementation of MetaspaceShared::misc_data_space_alloc() very awkward. The relevant code should be moved into the MetaspaceShared class.
[2] The following block of code appears twice in VM_PopulateDumpSharedSpace::doit(). It should be cleaned up using a 2-iteration loop.
mapinfo->write_header();
mapinfo->write_space(MetaspaceShared::ro, _loader_data->ro_metaspace(), true);
mapinfo->write_space(MetaspaceShared::rw, _loader_data->rw_metaspace(), false);
mapinfo->write_region(MetaspaceShared::md, _md_vs.low(),
pointer_delta(md_top, _md_vs.low(), sizeof(char)),
SharedMiscDataSize,
false, false);
mapinfo->write_region(MetaspaceShared::mc, _mc_vs.low(),
pointer_delta(mc_top, _mc_vs.low(), sizeof(char)),
SharedMiscCodeSize,
true, true);
mapinfo->write_string_regions(_string_regions);
http://hg.openjdk.java.net/jdk9/hs-rt/hotspot/file/8c188166869d/src/share/vm/memory/metaspaceShared.cpp
[1] The "md" and "mc" spaces are managed inside VM_PopulateDumpSharedSpace, which makes the implementation of MetaspaceShared::misc_data_space_alloc() very awkward. The relevant code should be moved into the MetaspaceShared class.
[2] The following block of code appears twice in VM_PopulateDumpSharedSpace::doit(). It should be cleaned up using a 2-iteration loop.
mapinfo->write_header();
mapinfo->write_space(MetaspaceShared::ro, _loader_data->ro_metaspace(), true);
mapinfo->write_space(MetaspaceShared::rw, _loader_data->rw_metaspace(), false);
mapinfo->write_region(MetaspaceShared::md, _md_vs.low(),
pointer_delta(md_top, _md_vs.low(), sizeof(char)),
SharedMiscDataSize,
false, false);
mapinfo->write_region(MetaspaceShared::mc, _mc_vs.low(),
pointer_delta(mc_top, _mc_vs.low(), sizeof(char)),
SharedMiscCodeSize,
true, true);
mapinfo->write_string_regions(_string_regions);