comparison src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @ 1960:878b57474103

6978187: G1: assert(ParallelGCThreads> 1 || n_yielded() == _hrrs->occupied()) strikes again Summary: An evacuation failure while copying the roots caused an object, A, to be forwarded to itself. During the subsequent RSet updating a reference to A was processed causing the reference to be added to the RSet of A's heap region. As a result of adding to the remembered set we ran into the issue described in 6930581 - the sparse table expanded and the RSet scanning code walked the cards in one instance of RHashTable (_cur) while the occupied() counts the cards in the expanded table (_next). Reviewed-by: tonyp, iveresov
author johnc
date Tue, 16 Nov 2010 14:07:33 -0800
parents 35e4e086d5f5
children f95d63e2154a
comparison
equal deleted inserted replaced
1954:e3e1fb85e50a 1960:878b57474103
793 RebuildRSOutOfRegionClosure(G1CollectedHeap* g1, int worker_i = 0) : 793 RebuildRSOutOfRegionClosure(G1CollectedHeap* g1, int worker_i = 0) :
794 _cl(g1->g1_rem_set(), worker_i), 794 _cl(g1->g1_rem_set(), worker_i),
795 _worker_i(worker_i), 795 _worker_i(worker_i),
796 _g1h(g1) 796 _g1h(g1)
797 { } 797 { }
798
798 bool doHeapRegion(HeapRegion* r) { 799 bool doHeapRegion(HeapRegion* r) {
799 if (!r->continuesHumongous()) { 800 if (!r->continuesHumongous()) {
800 _cl.set_from(r); 801 _cl.set_from(r);
801 r->oop_iterate(&_cl); 802 r->oop_iterate(&_cl);
802 } 803 }