Mercurial > hg > graal-jvmci-8
diff src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp @ 3777:e8b0b0392037
7046182: G1: remove unnecessary iterations over the collection set
Summary: Remove two unnecessary iterations over the collection set which are supposed to prepare the RSet's of the CSet regions for parallel iterations (we'll make sure this is done incrementally). I'll piggyback on this CR the removal of the G1_REM_SET_LOGGING code.
Reviewed-by: brutisso, johnc
author | tonyp |
---|---|
date | Tue, 21 Jun 2011 15:23:07 -0400 |
parents | c3f1170908be |
children | f44782f04dd4 |
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Mon Jun 20 22:03:13 2011 -0400 +++ b/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Tue Jun 21 15:23:07 2011 -0400 @@ -1085,8 +1085,9 @@ HeapRegionRemSet::HeapRegionRemSet(G1BlockOffsetSharedArray* bosa, HeapRegion* hr) - : _bosa(bosa), _other_regions(hr), _iter_state(Unclaimed) { } - + : _bosa(bosa), _other_regions(hr) { + reset_for_par_iteration(); +} void HeapRegionRemSet::setup_remset_size() { // Setup sparse and fine-grain tables sizes. @@ -1101,10 +1102,6 @@ guarantee(G1RSetSparseRegionEntries > 0 && G1RSetRegionEntries > 0 , "Sanity"); } -void HeapRegionRemSet::init_for_par_iteration() { - _iter_state = Unclaimed; -} - bool HeapRegionRemSet::claim_iter() { if (_iter_state != Unclaimed) return false; jint res = Atomic::cmpxchg(Claimed, (jint*)(&_iter_state), Unclaimed); @@ -1119,7 +1116,6 @@ return _iter_state == Complete; } - void HeapRegionRemSet::init_iterator(HeapRegionRemSetIterator* iter) const { iter->initialize(this); } @@ -1132,7 +1128,7 @@ while (iter.has_next(card_index)) { HeapWord* card_start = G1CollectedHeap::heap()->bot_shared()->address_for_index(card_index); - gclog_or_tty->print_cr(" Card " PTR_FORMAT ".", card_start); + gclog_or_tty->print_cr(" Card " PTR_FORMAT, card_start); } // XXX if (iter.n_yielded() != occupied()) { @@ -1159,6 +1155,14 @@ void HeapRegionRemSet::clear() { _other_regions.clear(); assert(occupied() == 0, "Should be clear."); + reset_for_par_iteration(); +} + +void HeapRegionRemSet::reset_for_par_iteration() { + _iter_state = Unclaimed; + _iter_claimed = 0; + // It's good to check this to make sure that the two methods are in sync. + assert(verify_ready_for_par_iteration(), "post-condition"); } void HeapRegionRemSet::scrub(CardTableModRefBS* ctbs,