changeset 9613:9c265a9a7251

More efficient test for clear-bitmap. Print reset-bitmap trace in ShenandoahTracePhases.
author rkennke
date Tue, 08 Sep 2015 21:00:24 +0200
parents 06740c15a2b5
children d9175ed51f4c
files src/share/vm/gc/shenandoah/shenandoahHeap.cpp src/share/vm/gc/shenandoah/shenandoahMarkCompact.cpp
diffstat 2 files changed, 9 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/gc/shenandoah/shenandoahHeap.cpp	Tue Sep 08 20:59:48 2015 +0200
+++ b/src/share/vm/gc/shenandoah/shenandoahHeap.cpp	Tue Sep 08 21:00:24 2015 +0200
@@ -246,36 +246,26 @@
 };
 
 void ShenandoahHeap::reset_mark_bitmap() {
+  if (ShenandoahTracePhases) {
+    tty->print_cr("Shenandoah starting concurrent reset bitmaps");
+  }
   ShenandoahHeapRegionSet regions = ShenandoahHeapRegionSet(_num_regions, _ordered_regions, _num_regions);
   ResetBitmapTask task = ResetBitmapTask(&regions);
   conc_workers()->set_active_workers(_max_conc_workers);
   conc_workers()->run_task(&task);
+  if (ShenandoahTracePhases) {
+    tty->print_cr("Shenandoah finishing concurrent reset bitmaps");
+  }
 }
 
 void ShenandoahHeap::reset_mark_bitmap_range(HeapWord* from, HeapWord* to) {
   _next_mark_bit_map->clearRange(MemRegion(from, to));
 }
 
-class BitmapClearClosure : public BitMapClosure {
-private:
-  CMBitMap* _bm;
-
-public:
-
-  BitmapClearClosure(CMBitMap* bm) : _bm(bm) {
-  }
-
-  bool do_bit(BitMap::idx_t offset) {
-    HeapWord* hw = _bm->offsetToHeapWord(offset);
-    bool is_marked = _bm->isMarked(hw);
-    return ! is_marked;
-  }
-};
-
 bool ShenandoahHeap::is_bitmap_clear() {
-  
-  BitmapClearClosure bitmap_clear_cl(_next_mark_bit_map);
-  return _next_mark_bit_map->iterate(&bitmap_clear_cl);
+  HeapWord* start = _ordered_regions[0]->bottom();
+  HeapWord* end = _ordered_regions[_num_regions-1]->end();
+  return _next_mark_bit_map->getNextMarkedWordAddress(start, end) == end;
 }
 
 void ShenandoahHeap::print_on(outputStream* st) const {
--- a/src/share/vm/gc/shenandoah/shenandoahMarkCompact.cpp	Tue Sep 08 20:59:48 2015 +0200
+++ b/src/share/vm/gc/shenandoah/shenandoahMarkCompact.cpp	Tue Sep 08 21:00:24 2015 +0200
@@ -127,8 +127,6 @@
     _heap->verify_heap_after_update_refs();
   }
 
-  _heap->reset_mark_bitmap();
-
   if (ShenandoahTraceFullGC) {
     gclog_or_tty->print_cr("Shenandoah-full-gc: finish with heap used: "SIZE_FORMAT" MB", _heap->used() / M);
   }