1.1 --- a/src/share/vm/gc_implementation/g1/concurrentMark.cpp Mon Jul 21 09:59:37 2014 +0200 1.2 +++ b/src/share/vm/gc_implementation/g1/concurrentMark.cpp Mon Jul 21 09:59:46 2014 +0200 1.3 @@ -890,6 +890,10 @@ 1.4 guarantee(!g1h->mark_in_progress(), "invariant"); 1.5 } 1.6 1.7 +bool ConcurrentMark::nextMarkBitmapIsClear() { 1.8 + return _nextMarkBitMap->getNextMarkedWordAddress(_heap_start, _heap_end) == _heap_end; 1.9 +} 1.10 + 1.11 class NoteStartOfMarkHRClosure: public HeapRegionClosure { 1.12 public: 1.13 bool doHeapRegion(HeapRegion* r) { 1.14 @@ -3358,7 +3362,8 @@ 1.15 1.16 // abandon current marking iteration due to a Full GC 1.17 void ConcurrentMark::abort() { 1.18 - // Clear all marks to force marking thread to do nothing 1.19 + // Clear all marks in the next bitmap for the next marking cycle. This will allow us to skip the next 1.20 + // concurrent bitmap clearing. 1.21 _nextMarkBitMap->clearAll(); 1.22 // Clear the liveness counting data 1.23 clear_all_count_data();