Mercurial > hg > graal-compiler
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 } |