< prev index next >

src/hotspot/share/memory/filemap.cpp

Print this page

*** 852,862 **** address FileMapInfo::decode_start_address(CDSFileMapRegion* spc, bool with_current_oop_encoding_mode) { if (with_current_oop_encoding_mode) { return (address)CompressedOops::decode_not_null(offset_of_space(spc)); } else { ! return (address)HeapShared::decode_with_archived_oop_encoding_mode(offset_of_space(spc)); } } static MemRegion *string_ranges = NULL; static MemRegion *open_archive_heap_ranges = NULL; --- 852,862 ---- address FileMapInfo::decode_start_address(CDSFileMapRegion* spc, bool with_current_oop_encoding_mode) { if (with_current_oop_encoding_mode) { return (address)CompressedOops::decode_not_null(offset_of_space(spc)); } else { ! return (address)HeapShared::decode_from_archive(offset_of_space(spc)); } } static MemRegion *string_ranges = NULL; static MemRegion *open_archive_heap_ranges = NULL;
*** 878,888 **** for (int i = MetaspaceShared::first_string; i <= MetaspaceShared::last_valid_region; i++) { CDSFileMapRegion* si = space_at(i); size_t size = si->_used; if (size > 0) { ! address s = start_address_with_current_oop_encoding_mode(si); address e = s + size; if (start > s) { start = s; } if (end < e) { --- 878,888 ---- for (int i = MetaspaceShared::first_string; i <= MetaspaceShared::last_valid_region; i++) { CDSFileMapRegion* si = space_at(i); size_t size = si->_used; if (size > 0) { ! address s = start_address_as_decoded_with_current_oop_encoding_mode(si); address e = s + size; if (start > s) { start = s; } if (end < e) {
*** 970,994 **** log_info(cds)("CDS heap data relocation delta = " INTX_FORMAT " bytes", delta); HeapShared::init_narrow_oop_decoding(narrow_oop_base() + delta, narrow_oop_shift()); CDSFileMapRegion* si = space_at(MetaspaceShared::first_string); ! address relocated_strings_bottom = start_address_with_archived_oop_encoding_mode(si); ! if (!is_aligned(relocated_strings_bottom + delta, HeapRegion::GrainBytes)) { // Align the bottom of the string regions at G1 region boundary. This will avoid // the situation where the highest open region and the lowest string region sharing // the same G1 region. Otherwise we will fail to map the open regions. size_t align = size_t(relocated_strings_bottom) % HeapRegion::GrainBytes; delta -= align; - assert(is_aligned(relocated_strings_bottom + delta, HeapRegion::GrainBytes), "must be"); - log_info(cds)("CDS heap data need to be relocated lower by a further " SIZE_FORMAT ! " bytes to be aligned with HeapRegion::GrainBytes", align); ! HeapShared::init_narrow_oop_decoding(narrow_oop_base() + delta, narrow_oop_shift()); _heap_pointers_need_patching = true; } // First, map string regions as closed archive heap regions. // GC does not write into the regions. if (map_heap_data(&string_ranges, MetaspaceShared::first_string, --- 970,993 ---- log_info(cds)("CDS heap data relocation delta = " INTX_FORMAT " bytes", delta); HeapShared::init_narrow_oop_decoding(narrow_oop_base() + delta, narrow_oop_shift()); CDSFileMapRegion* si = space_at(MetaspaceShared::first_string); ! address relocated_strings_bottom = start_address_as_decoded_from_archive(si); ! if (!is_aligned(relocated_strings_bottom, HeapRegion::GrainBytes)) { // Align the bottom of the string regions at G1 region boundary. This will avoid // the situation where the highest open region and the lowest string region sharing // the same G1 region. Otherwise we will fail to map the open regions. size_t align = size_t(relocated_strings_bottom) % HeapRegion::GrainBytes; delta -= align; log_info(cds)("CDS heap data need to be relocated lower by a further " SIZE_FORMAT ! " bytes to " INTX_FORMAT " to be aligned with HeapRegion::GrainBytes", align, delta); HeapShared::init_narrow_oop_decoding(narrow_oop_base() + delta, narrow_oop_shift()); _heap_pointers_need_patching = true; + relocated_strings_bottom = start_address_as_decoded_from_archive(si); } + assert(is_aligned(relocated_strings_bottom, HeapRegion::GrainBytes), "must be"); // First, map string regions as closed archive heap regions. // GC does not write into the regions. if (map_heap_data(&string_ranges, MetaspaceShared::first_string,
*** 1030,1040 **** for (int i = first; i < first + max; i++) { si = space_at(i); size_t size = si->_used; if (size > 0) { ! HeapWord* start = (HeapWord*)start_address_with_archived_oop_encoding_mode(si); regions[region_num] = MemRegion(start, size / HeapWordSize); region_num ++; log_info(cds)("Trying to map heap data: region[%d] at " INTPTR_FORMAT ", size = " SIZE_FORMAT_W(8) " bytes", i, p2i(start), size); } --- 1029,1039 ---- for (int i = first; i < first + max; i++) { si = space_at(i); size_t size = si->_used; if (size > 0) { ! HeapWord* start = (HeapWord*)start_address_as_decoded_from_archive(si); regions[region_num] = MemRegion(start, size / HeapWordSize); region_num ++; log_info(cds)("Trying to map heap data: region[%d] at " INTPTR_FORMAT ", size = " SIZE_FORMAT_W(8) " bytes", i, p2i(start), size); }
*** 1240,1250 **** char* FileMapInfo::region_addr(int idx) { CDSFileMapRegion* si = space_at(idx); if (MetaspaceShared::is_heap_region(idx)) { assert(DumpSharedSpaces, "The following doesn't work at runtime"); return si->_used > 0 ? ! (char*)start_address_with_current_oop_encoding_mode(si) : NULL; } else { return si->_addr._base; } } --- 1239,1249 ---- char* FileMapInfo::region_addr(int idx) { CDSFileMapRegion* si = space_at(idx); if (MetaspaceShared::is_heap_region(idx)) { assert(DumpSharedSpaces, "The following doesn't work at runtime"); return si->_used > 0 ? ! (char*)start_address_as_decoded_with_current_oop_encoding_mode(si) : NULL; } else { return si->_addr._base; } }
< prev index next >