182 _magic = CDS_ARCHIVE_MAGIC; |
182 _magic = CDS_ARCHIVE_MAGIC; |
183 _version = CURRENT_CDS_ARCHIVE_VERSION; |
183 _version = CURRENT_CDS_ARCHIVE_VERSION; |
184 _alignment = alignment; |
184 _alignment = alignment; |
185 _obj_alignment = ObjectAlignmentInBytes; |
185 _obj_alignment = ObjectAlignmentInBytes; |
186 _compact_strings = CompactStrings; |
186 _compact_strings = CompactStrings; |
187 _narrow_oop_mode = Universe::narrow_oop_mode(); |
187 _narrow_oop_mode = CompressedOops::mode(); |
188 _narrow_oop_base = Universe::narrow_oop_base(); |
188 _narrow_oop_base = CompressedOops::base(); |
189 _narrow_oop_shift = Universe::narrow_oop_shift(); |
189 _narrow_oop_shift = CompressedOops::shift(); |
190 _max_heap_size = MaxHeapSize; |
190 _max_heap_size = MaxHeapSize; |
191 _narrow_klass_base = Universe::narrow_klass_base(); |
191 _narrow_klass_base = CompressedKlassPointers::base(); |
192 _narrow_klass_shift = Universe::narrow_klass_shift(); |
192 _narrow_klass_shift = CompressedKlassPointers::shift(); |
193 _shared_path_table_size = mapinfo->_shared_path_table_size; |
193 _shared_path_table_size = mapinfo->_shared_path_table_size; |
194 _shared_path_table = mapinfo->_shared_path_table; |
194 _shared_path_table = mapinfo->_shared_path_table; |
195 _shared_path_entry_size = mapinfo->_shared_path_entry_size; |
195 _shared_path_entry_size = mapinfo->_shared_path_entry_size; |
196 if (HeapShared::is_heap_object_archiving_allowed()) { |
196 if (HeapShared::is_heap_object_archiving_allowed()) { |
197 _heap_reserved = Universe::heap()->reserved_region(); |
197 _heap_reserved = Universe::heap()->reserved_region(); |
636 region, size, p2i(base), _file_offset); |
636 region, size, p2i(base), _file_offset); |
637 } else { |
637 } else { |
638 si->_file_offset = _file_offset; |
638 si->_file_offset = _file_offset; |
639 } |
639 } |
640 if (HeapShared::is_heap_region(region)) { |
640 if (HeapShared::is_heap_region(region)) { |
641 assert((base - (char*)Universe::narrow_oop_base()) % HeapWordSize == 0, "Sanity"); |
641 assert((base - (char*)CompressedOops::base()) % HeapWordSize == 0, "Sanity"); |
642 if (base != NULL) { |
642 if (base != NULL) { |
643 si->_addr._offset = (intx)CompressedOops::encode_not_null((oop)base); |
643 si->_addr._offset = (intx)CompressedOops::encode_not_null((oop)base); |
644 } else { |
644 } else { |
645 si->_addr._offset = 0; |
645 si->_addr._offset = 0; |
646 } |
646 } |
974 narrow_oop_mode(), p2i(narrow_oop_base()), narrow_oop_shift()); |
974 narrow_oop_mode(), p2i(narrow_oop_base()), narrow_oop_shift()); |
975 |
975 |
976 log_info(cds)("The current max heap size = " SIZE_FORMAT "M, HeapRegion::GrainBytes = " SIZE_FORMAT, |
976 log_info(cds)("The current max heap size = " SIZE_FORMAT "M, HeapRegion::GrainBytes = " SIZE_FORMAT, |
977 heap_reserved.byte_size()/M, HeapRegion::GrainBytes); |
977 heap_reserved.byte_size()/M, HeapRegion::GrainBytes); |
978 log_info(cds)(" narrow_klass_base = " PTR_FORMAT ", narrow_klass_shift = %d", |
978 log_info(cds)(" narrow_klass_base = " PTR_FORMAT ", narrow_klass_shift = %d", |
979 p2i(Universe::narrow_klass_base()), Universe::narrow_klass_shift()); |
979 p2i(CompressedKlassPointers::base()), CompressedKlassPointers::shift()); |
980 log_info(cds)(" narrow_oop_mode = %d, narrow_oop_base = " PTR_FORMAT ", narrow_oop_shift = %d", |
980 log_info(cds)(" narrow_oop_mode = %d, narrow_oop_base = " PTR_FORMAT ", narrow_oop_shift = %d", |
981 Universe::narrow_oop_mode(), p2i(Universe::narrow_oop_base()), Universe::narrow_oop_shift()); |
981 CompressedOops::mode(), p2i(CompressedOops::base()), CompressedOops::shift()); |
982 |
982 |
983 if (narrow_klass_base() != Universe::narrow_klass_base() || |
983 if (narrow_klass_base() != CompressedKlassPointers::base() || |
984 narrow_klass_shift() != Universe::narrow_klass_shift()) { |
984 narrow_klass_shift() != CompressedKlassPointers::shift()) { |
985 log_info(cds)("CDS heap data cannot be used because the archive was created with an incompatible narrow klass encoding mode."); |
985 log_info(cds)("CDS heap data cannot be used because the archive was created with an incompatible narrow klass encoding mode."); |
986 return; |
986 return; |
987 } |
987 } |
988 |
988 |
989 if (narrow_oop_mode() != Universe::narrow_oop_mode() || |
989 if (narrow_oop_mode() != CompressedOops::mode() || |
990 narrow_oop_base() != Universe::narrow_oop_base() || |
990 narrow_oop_base() != CompressedOops::base() || |
991 narrow_oop_shift() != Universe::narrow_oop_shift()) { |
991 narrow_oop_shift() != CompressedOops::shift()) { |
992 log_info(cds)("CDS heap data need to be relocated because the archive was created with an incompatible oop encoding mode."); |
992 log_info(cds)("CDS heap data need to be relocated because the archive was created with an incompatible oop encoding mode."); |
993 _heap_pointers_need_patching = true; |
993 _heap_pointers_need_patching = true; |
994 } else { |
994 } else { |
995 MemRegion range = get_heap_regions_range_with_current_oop_encoding_mode(); |
995 MemRegion range = get_heap_regions_range_with_current_oop_encoding_mode(); |
996 if (!heap_reserved.contains(range)) { |
996 if (!heap_reserved.contains(range)) { |