< prev index next >

src/hotspot/share/gc/g1/g1Allocator.inline.hpp

Print this page
rev 52634 : 8214118: HeapRegions marked as archive even if CDS mapping fails
Reviewed-by:


  92 
  93 // Create the maps which is used to identify archive objects.
  94 inline void G1ArchiveAllocator::enable_archive_object_check() {
  95   if (_archive_check_enabled) {
  96     return;
  97   }
  98 
  99   _archive_check_enabled = true;
 100   size_t length = Universe::heap()->max_capacity();
 101   _closed_archive_region_map.initialize((HeapWord*)Universe::heap()->base(),
 102                                         (HeapWord*)Universe::heap()->base() + length,
 103                                         HeapRegion::GrainBytes);
 104   _open_archive_region_map.initialize((HeapWord*)Universe::heap()->base(),
 105                                       (HeapWord*)Universe::heap()->base() + length,
 106                                       HeapRegion::GrainBytes);
 107 }
 108 
 109 // Set the regions containing the specified address range as archive.
 110 inline void G1ArchiveAllocator::set_range_archive(MemRegion range, bool open) {
 111   assert(_archive_check_enabled, "archive range check not enabled");




 112   if (open) {
 113     _open_archive_region_map.set_by_address(range, true);
 114   } else {
 115     _closed_archive_region_map.set_by_address(range, true);














 116   }
 117 }
 118 
 119 // Check if an object is in a closed archive region using the _archive_region_map.
 120 inline bool G1ArchiveAllocator::in_closed_archive_range(oop object) {
 121   // This is the out-of-line part of is_closed_archive_object test, done separately
 122   // to avoid additional performance impact when the check is not enabled.
 123   return _closed_archive_region_map.get_by_address((HeapWord*)object);
 124 }
 125 
 126 inline bool G1ArchiveAllocator::in_open_archive_range(oop object) {
 127   return _open_archive_region_map.get_by_address((HeapWord*)object);
 128 }
 129 
 130 // Check if archive object checking is enabled, to avoid calling in_open/closed_archive_range
 131 // unnecessarily.
 132 inline bool G1ArchiveAllocator::archive_check_enabled() {
 133   return _archive_check_enabled;
 134 }
 135 


  92 
  93 // Create the maps which is used to identify archive objects.
  94 inline void G1ArchiveAllocator::enable_archive_object_check() {
  95   if (_archive_check_enabled) {
  96     return;
  97   }
  98 
  99   _archive_check_enabled = true;
 100   size_t length = Universe::heap()->max_capacity();
 101   _closed_archive_region_map.initialize((HeapWord*)Universe::heap()->base(),
 102                                         (HeapWord*)Universe::heap()->base() + length,
 103                                         HeapRegion::GrainBytes);
 104   _open_archive_region_map.initialize((HeapWord*)Universe::heap()->base(),
 105                                       (HeapWord*)Universe::heap()->base() + length,
 106                                       HeapRegion::GrainBytes);
 107 }
 108 
 109 // Set the regions containing the specified address range as archive.
 110 inline void G1ArchiveAllocator::set_range_archive(MemRegion range, bool open) {
 111   assert(_archive_check_enabled, "archive range check not enabled");
 112   log_info(gc, cds)("Mark %s archive regions in map: [" PTR_FORMAT ", " PTR_FORMAT "]",
 113                      open ? "open" : "closed",
 114                      p2i(range.start()),
 115                      p2i(range.last()));
 116   if (open) {
 117     _open_archive_region_map.set_by_address(range, true);
 118   } else {
 119     _closed_archive_region_map.set_by_address(range, true);
 120   }
 121 }
 122 
 123 // Clear the archive regions map containing the specified address range.
 124 inline void G1ArchiveAllocator::clear_range_archive(MemRegion range, bool open) {
 125   assert(_archive_check_enabled, "archive range check not enabled");
 126   log_info(gc, cds)("Clear %s archive regions in map: [" PTR_FORMAT ", " PTR_FORMAT "]",
 127                     open ? "open" : "closed",
 128                     p2i(range.start()),
 129                     p2i(range.last()));
 130   if (open) {
 131     _open_archive_region_map.set_by_address(range, false);
 132   } else {
 133     _closed_archive_region_map.set_by_address(range, false);
 134   }
 135 }
 136 
 137 // Check if an object is in a closed archive region using the _archive_region_map.
 138 inline bool G1ArchiveAllocator::in_closed_archive_range(oop object) {
 139   // This is the out-of-line part of is_closed_archive_object test, done separately
 140   // to avoid additional performance impact when the check is not enabled.
 141   return _closed_archive_region_map.get_by_address((HeapWord*)object);
 142 }
 143 
 144 inline bool G1ArchiveAllocator::in_open_archive_range(oop object) {
 145   return _open_archive_region_map.get_by_address((HeapWord*)object);
 146 }
 147 
 148 // Check if archive object checking is enabled, to avoid calling in_open/closed_archive_range
 149 // unnecessarily.
 150 inline bool G1ArchiveAllocator::archive_check_enabled() {
 151   return _archive_check_enabled;
 152 }
 153 
< prev index next >