RFR(XS): G1: Concurrent mark stuck in loop calling os::elapsedVTime()
per.liden at oracle.com
Mon May 5 08:25:25 UTC 2014
Thanks Bengt and Thomas!
On 04/30/2014 06:09 PM, Thomas Schatzl wrote:
> On Wed, 2014-04-30 at 15:13 +0200, Per Liden wrote:
>> Here's another G1 concurrent mark fix I'd like to have reviewed.
>> Summary: If the heap is expended when a concurrent mark is in progress
>> there's a window where the global marking finger (_cm->_finger) points
>> past the heap end (_cm->_heap_end). When this happens the marking
>> threads will get stuck in a loop spinning, because _cm->out_of_regions()
>> will still return false. out_of_regions() is currently implemented as
>> "return _finger == _heap_end;".
>> This patch fixes this problem by adjusting out_of_region() to instead be
>> "return _finger >= _heap_end;". This is safe because objects in those
>> new regions will be considered live anyway, because their TAMS will be
>> equal to bottom.
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8040804
>> Webrev: http://cr.openjdk.java.net/~pliden/8040804/webrev.0/
> Looks good.
More information about the hotspot-gc-dev