@@ -1603,8 +1603,7 @@ MapArchiveResult MetaspaceShared::map_archives(FileMapInfo* static_mapinfo, File
16031603
16041604 // Set up compressed Klass pointer encoding: the encoding range must
16051605 // cover both archive and class space.
1606- const address encoding_base = (address)mapped_base_address;
1607- const address klass_range_start = encoding_base + prot_zone_size;
1606+ const address klass_range_start = (address)mapped_base_address;
16081607 const size_t klass_range_size = (address)class_space_rs.end () - klass_range_start;
16091608 if (INCLUDE_CDS_JAVA_HEAP || UseCompactObjectHeaders) {
16101609 // The CDS archive may contain narrow Klass IDs that were precomputed at archive generation time:
@@ -1615,13 +1614,19 @@ MapArchiveResult MetaspaceShared::map_archives(FileMapInfo* static_mapinfo, File
16151614 // mapping start (including protection zone), shift should be the shift used at archive generation time.
16161615 CompressedKlassPointers::initialize_for_given_encoding (
16171616 klass_range_start, klass_range_size,
1618- encoding_base , ArchiveBuilder::precomputed_narrow_klass_shift () // precomputed encoding, see ArchiveBuilder
1617+ klass_range_start , ArchiveBuilder::precomputed_narrow_klass_shift () // precomputed encoding, see ArchiveBuilder
16191618 );
1619+ assert (CompressedKlassPointers::base () == klass_range_start, " must be" );
16201620 } else {
16211621 // Let JVM freely choose encoding base and shift
16221622 CompressedKlassPointers::initialize (klass_range_start, klass_range_size);
1623+ assert (CompressedKlassPointers::base () == nullptr ||
1624+ CompressedKlassPointers::base () == klass_range_start, " must be" );
1625+ }
1626+ // Establish protection zone, but only if we need one
1627+ if (CompressedKlassPointers::base () == klass_range_start) {
1628+ CompressedKlassPointers::establish_protection_zone (klass_range_start, prot_zone_size);
16231629 }
1624- CompressedKlassPointers::establish_protection_zone (encoding_base, prot_zone_size);
16251630
16261631 // map_or_load_heap_region() compares the current narrow oop and klass encodings
16271632 // with the archived ones, so it must be done after all encodings are determined.
0 commit comments