< prev index next >

src/hotspot/share/memory/filemap.cpp

Print this page

@@ -190,15 +190,13 @@
   _narrow_klass_base = Universe::narrow_klass_base();
   _narrow_klass_shift = Universe::narrow_klass_shift();
   _shared_path_table_size = mapinfo->_shared_path_table_size;
   _shared_path_table = mapinfo->_shared_path_table;
   _shared_path_entry_size = mapinfo->_shared_path_entry_size;
-#if INCLUDE_CDS_JAVA_HEAP
   if (MetaspaceShared::is_heap_object_archiving_allowed()) {
-    _g1_reserved = G1CollectedHeap::heap()->g1_reserved();
+    _heap_reserved = Universe::heap()->reserved_region();
   }
-#endif
 
   // The following fields are for sanity checks for whether this archive
   // will function correctly with this JVM and the bootclasspath it's
   // invoked with.
 

@@ -853,11 +851,10 @@
 
   *top_ret = base + size;
   return base;
 }
 
-
 address FileMapInfo::FileMapHeader::space_info::decode_start_address(bool with_current_oop_encoding_mode) {
   if (with_current_oop_encoding_mode) {
     return (address)CompressedOops::decode_not_null(offset());
   } else {
     return (address)HeapShared::decode_with_archived_oop_encoding_mode(offset());

@@ -872,12 +869,14 @@
 #if INCLUDE_CDS_JAVA_HEAP
 bool FileMapInfo::has_heap_regions() {
   return (_header->_space[MetaspaceShared::first_string]._used > 0);
 }
 
-// Returns the address range where the heap regions would occupy using the
-// current oop encoding mode.
+// Returns the address range of the archived heap regions computed using the
+// current oop encoding mode. This range may be different than the one seen at
+// dump time due to encoding mode differences. The result is used in determining
+// if/how these regions should be relocated at run time.
 MemRegion FileMapInfo::get_heap_regions_range_with_current_oop_encoding_mode() {
   address start = (address) max_uintx;
   address end   = NULL;
 
   for (int i = MetaspaceShared::first_string; i <= MetaspaceShared::last_valid_region; i++) {

@@ -900,13 +899,13 @@
 
 //
 // Map the shared string objects and open archive heap objects to the runtime
 // java heap.
 //
-// The shared strings are mapped near the runtime java heap top. The
-// mapped strings contain no out-going references to any other java heap
-// regions. GC does not write into the mapped shared strings.
+// The shared strings are mapped close to the end of the java heap top in
+// closed archive regions. The mapped strings contain no out-going references
+// to any other java heap regions. GC does not write into the mapped shared strings.
 //
 // The open archive heap objects are mapped below the shared strings in
 // the runtime java heap. The mapped open archive heap data only contain
 // references to the shared strings and open archive objects initially.
 // During runtime execution, out-going references to any other java heap

@@ -917,43 +916,43 @@
     log_info(cds)("CDS heap data is being ignored. UseG1GC, "
                   "UseCompressedOops and UseCompressedClassPointers are required.");
     return;
   }
 
-  MemRegion g1_reserved = G1CollectedHeap::heap()->g1_reserved();
+  MemRegion heap_reserved = Universe::heap()->reserved_region();
 
-  log_info(cds)("CDS archive was created with max heap size = " UINTX_FORMAT "M, and the following configuration:",
+  log_info(cds)("CDS archive was created with max heap size = " SIZE_FORMAT "M, and the following configuration:",
                 max_heap_size()/M);
   log_info(cds)("    narrow_klass_base = " PTR_FORMAT ", narrow_klass_shift = %d",
                 p2i(narrow_klass_base()), narrow_klass_shift());
   log_info(cds)("    narrow_oop_mode = %d, narrow_oop_base = " PTR_FORMAT ", narrow_oop_shift = %d",
                 narrow_oop_mode(), p2i(narrow_oop_base()), narrow_oop_shift());
 
-  log_info(cds)("The current max heap size = " UINTX_FORMAT "M, HeapRegion::GrainBytes = " UINTX_FORMAT,
-                g1_reserved.byte_size()/M, HeapRegion::GrainBytes);
+  log_info(cds)("The current max heap size = " SIZE_FORMAT "M, HeapRegion::GrainBytes = " SIZE_FORMAT,
+                heap_reserved.byte_size()/M, HeapRegion::GrainBytes);
   log_info(cds)("    narrow_klass_base = " PTR_FORMAT ", narrow_klass_shift = %d",
                 p2i(Universe::narrow_klass_base()), Universe::narrow_klass_shift());
   log_info(cds)("    narrow_oop_mode = %d, narrow_oop_base = " PTR_FORMAT ", narrow_oop_shift = %d",
                 Universe::narrow_oop_mode(), p2i(Universe::narrow_oop_base()), Universe::narrow_oop_shift());
                 
   if (narrow_klass_base() != Universe::narrow_klass_base() ||
       narrow_klass_shift() != Universe::narrow_klass_shift()) {
-    log_info(cds)("CDS heap data cannot be used because the archive was created with an incompatible heap size.");
+    log_info(cds)("CDS heap data cannot be used because the archive was created with an incompatible oop encoding mode.");
     return;
   }
 
   if (narrow_oop_mode() != Universe::narrow_oop_mode() ||
       narrow_oop_base() != Universe::narrow_oop_base() ||
       narrow_oop_shift() != Universe::narrow_oop_shift()) {
-    log_info(cds)("CDS heap data need to be relocated because the archive was created with an incompatible heap size.");
+    log_info(cds)("CDS heap data need to be relocated because the archive was created with an incompatible oop encoding mode.");
     _heap_pointers_need_patching = true;
   } else {
     MemRegion range = get_heap_regions_range_with_current_oop_encoding_mode();
-    if (!g1_reserved.contains(range)) {
+    if (!heap_reserved.contains(range)) {
       log_info(cds)("CDS heap data need to be relocated because");
       log_info(cds)("the desired range " PTR_FORMAT " - "  PTR_FORMAT, p2i(range.start()), p2i(range.end()));
-      log_info(cds)("is outside of the heap " PTR_FORMAT " - "  PTR_FORMAT, p2i(g1_reserved.start()), p2i(g1_reserved.end()));
+      log_info(cds)("is outside of the heap " PTR_FORMAT " - "  PTR_FORMAT, p2i(heap_reserved.start()), p2i(heap_reserved.end()));
       _heap_pointers_need_patching = true;
     }
   }
 
   ptrdiff_t delta = 0;

@@ -965,12 +964,12 @@
     //
     // At dump time, the archived heap regions were near the top of the heap.
     // At run time, they may not be inside the heap, so we move them so
     // that they are now near the top of the runtime time. This can be done by
     // the simple math of adding the delta as shown above.
-    address dumptime_heap_end = (address)_header->_g1_reserved.end();
-    address runtime_heap_end = (address)g1_reserved.end();
+    address dumptime_heap_end = (address)_header->_heap_reserved.end();
+    address runtime_heap_end = (address)heap_reserved.end();
     delta = runtime_heap_end - dumptime_heap_end;
   }
 
   log_info(cds)("CDS heap data relocation delta = " INTX_FORMAT " bytes", delta);
   HeapShared::init_narrow_oop_decoding(narrow_oop_base() + delta, narrow_oop_shift());

@@ -983,11 +982,11 @@
     // 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 " UINTX_FORMAT
+    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;
   }

@@ -1037,12 +1036,12 @@
     size_t size = si->_used;
     if (size > 0) {
       HeapWord* start = (HeapWord*)si->start_address_with_archived_oop_encoding_mode();
       regions[region_num] = MemRegion(start, size / HeapWordSize);
       region_num ++;
-      log_info(cds)("Trying to map heap data: region[%d] at " INTPTR_FORMAT ", size = %8d bytes",
-                    i, p2i(start), int(size));
+      log_info(cds)("Trying to map heap data: region[%d] at " INTPTR_FORMAT ", size = " SIZE_FORMAT_W(8) " bytes",
+                    i, p2i(start), size);
     }
   }
 
   if (region_num == 0) {
     return false; // no archived java heap data

@@ -1072,11 +1071,11 @@
                                 si->_allow_exec);
     if (base == NULL || base != addr) {
       // dealloc the regions from java heap
       dealloc_archive_heap_regions(regions, region_num);
       log_info(cds)("UseSharedSpaces: Unable to map at required address in java heap. "
-                    INTPTR_FORMAT ", size = " UINTX_FORMAT " bytes",
+                    INTPTR_FORMAT ", size = " SIZE_FORMAT " bytes",
                     p2i(addr), regions[i].byte_size());
       return false;
     }
   }
 
< prev index next >