1137 } else {
1138 result = MAP_ARCHIVE_MMAP_FAILURE;
1139 }
1140 }
1141
1142 if (result == MAP_ARCHIVE_SUCCESS) {
1143 SharedBaseAddress = (size_t)mapped_base_address;
1144 #ifdef _LP64
1145 if (Metaspace::using_class_space()) {
1146 // Set up ccs in metaspace.
1147 Metaspace::initialize_class_space(class_space_rs);
1148
1149 // Set up compressed Klass pointer encoding: the encoding range must
1150 // cover both archive and class space.
1151 address cds_base = (address)static_mapinfo->mapped_base();
1152 address ccs_end = (address)class_space_rs.end();
1153 assert(ccs_end > cds_base, "Sanity check");
1154 #if INCLUDE_CDS_JAVA_HEAP
1155 // We archived objects with pre-computed narrow Klass id. Set up encoding such that these Ids stay valid.
1156 address precomputed_narrow_klass_base = cds_base;
1157 const int precomputed_narrow_klass_shift = ArchiveHeapWriter::precomputed_narrow_klass_shift;
1158 CompressedKlassPointers::initialize_for_given_encoding(
1159 cds_base, ccs_end - cds_base, // Klass range
1160 precomputed_narrow_klass_base, precomputed_narrow_klass_shift // precomputed encoding, see ArchiveHeapWriter
1161 );
1162 #else
1163 CompressedKlassPointers::initialize (
1164 cds_base, ccs_end - cds_base // Klass range
1165 );
1166 #endif // INCLUDE_CDS_JAVA_HEAP
1167 // map_or_load_heap_region() compares the current narrow oop and klass encodings
1168 // with the archived ones, so it must be done after all encodings are determined.
1169 static_mapinfo->map_or_load_heap_region();
1170 }
1171 #endif // _LP64
1172 log_info(cds)("initial optimized module handling: %s", MetaspaceShared::use_optimized_module_handling() ? "enabled" : "disabled");
1173 log_info(cds)("initial full module graph: %s", CDSConfig::is_loading_full_module_graph() ? "enabled" : "disabled");
1174 } else {
1175 unmap_archive(static_mapinfo);
1176 unmap_archive(dynamic_mapinfo);
1177 release_reserved_spaces(total_space_rs, archive_space_rs, class_space_rs);
1178 }
1179
1180 return result;
|
1137 } else {
1138 result = MAP_ARCHIVE_MMAP_FAILURE;
1139 }
1140 }
1141
1142 if (result == MAP_ARCHIVE_SUCCESS) {
1143 SharedBaseAddress = (size_t)mapped_base_address;
1144 #ifdef _LP64
1145 if (Metaspace::using_class_space()) {
1146 // Set up ccs in metaspace.
1147 Metaspace::initialize_class_space(class_space_rs);
1148
1149 // Set up compressed Klass pointer encoding: the encoding range must
1150 // cover both archive and class space.
1151 address cds_base = (address)static_mapinfo->mapped_base();
1152 address ccs_end = (address)class_space_rs.end();
1153 assert(ccs_end > cds_base, "Sanity check");
1154 #if INCLUDE_CDS_JAVA_HEAP
1155 // We archived objects with pre-computed narrow Klass id. Set up encoding such that these Ids stay valid.
1156 address precomputed_narrow_klass_base = cds_base;
1157 const int precomputed_narrow_klass_shift = ArchiveBuilder::precomputed_narrow_klass_shift;
1158 CompressedKlassPointers::initialize_for_given_encoding(
1159 cds_base, ccs_end - cds_base, // Klass range
1160 precomputed_narrow_klass_base, precomputed_narrow_klass_shift // precomputed encoding, see ArchiveBuilder
1161 );
1162 #else
1163 CompressedKlassPointers::initialize (
1164 cds_base, ccs_end - cds_base // Klass range
1165 );
1166 #endif // INCLUDE_CDS_JAVA_HEAP
1167 // map_or_load_heap_region() compares the current narrow oop and klass encodings
1168 // with the archived ones, so it must be done after all encodings are determined.
1169 static_mapinfo->map_or_load_heap_region();
1170 }
1171 #endif // _LP64
1172 log_info(cds)("initial optimized module handling: %s", MetaspaceShared::use_optimized_module_handling() ? "enabled" : "disabled");
1173 log_info(cds)("initial full module graph: %s", CDSConfig::is_loading_full_module_graph() ? "enabled" : "disabled");
1174 } else {
1175 unmap_archive(static_mapinfo);
1176 unmap_archive(dynamic_mapinfo);
1177 release_reserved_spaces(total_space_rs, archive_space_rs, class_space_rs);
1178 }
1179
1180 return result;
|