< prev index next >

src/share/vm/gc_implementation/shared/markBitMap.cpp

Print this page
rev 10661 : [backport] Cleanup unused bitmap methods
rev 10769 : [backport] Cherry-pick bulk MarkBitMap clearing methods

@@ -61,22 +61,22 @@
   _bmStartWord = heap.start();
   _bmWordSize = heap.word_size();
 
   _bm.set_map((BitMap::bm_word_t*) bitmap.start());
   _bm.set_size(_bmWordSize >> _shifter);
+  _covered = heap;
 }
 
-void MarkBitMap::clear_range(MemRegion mr) {
-  mr.intersection(MemRegion(_bmStartWord, _bmWordSize));
-  assert(!mr.is_empty(), "unexpected empty region");
+void MarkBitMap::do_clear(MemRegion mr, bool large) {
+  MemRegion intersection = mr.intersection(_covered);
+  assert(!intersection.is_empty(),
+         err_msg("Given range from " PTR_FORMAT " to " PTR_FORMAT " is completely outside the heap",
+                 p2i(mr.start()), p2i(mr.end())));
   // convert address range into offset range
-  _bm.clear_range(heapWordToOffset(mr.start()),
-                  heapWordToOffset(mr.end()));
-}
-
-void MarkBitMap::clear_range_large(MemRegion mr) {
-  mr.intersection(MemRegion(_bmStartWord, _bmWordSize));
-  assert(!mr.is_empty(), "unexpected empty region");
-  // convert address range into offset range
-  _bm.clear_large_range(heapWordToOffset(mr.start()),
-                        heapWordToOffset(mr.end()));
+  size_t beg = heapWordToOffset(intersection.start());
+  size_t end = heapWordToOffset(intersection.end());
+  if (large) {
+    _bm.clear_large_range(beg, end);
+  } else {
+    _bm.clear_range(beg, end);
+  }
 }
< prev index next >