Request for review (s) - 8021809: Partitioning based on eden sampling during allocation not reset correctly
jon.masamitsu at oracle.com
Tue Aug 13 04:00:40 UTC 2013
On 8/12/2013 5:28 PM, Srinivas Ramakrishna wrote:
> Reviewed. Looks good to me.
> (Btw 8022817 isn't yet visible on bugs.sun.com.)
> On Aug 12, 2013, at 11:19, Jon Masamitsu <jon.masamitsu at oracle.com> wrote:
>> I'm reinstating this request as is.
>> The observed failure which caused me to withdraw this is
>> due to a different bug 8022817. The fix for 8022817 will
>> be reviewed separately.
>> On 7/30/13 3:52 PM, Jon Masamitsu wrote:
>>> The partitioning of eden for parallel CMS initial mark and remark
>>> depends of the setting of _eden_chunk_index to correctly reflect
>>> the occupancy of eden. For example if _eden_chunk_index is 3,
>>> then eden should be dividable into 3 chunks, each chunk
>>> available for parallel processing. In particular after a young
>>> gen collection when eden is empty, the broken code depends on
>>> _eden_chunk_index being 0. The resetting of _eden_chunk_index
>>> is done in the gc_epilogue() of the CMS gen. When
>>> 1) a System.gc() is called
>>> 2) UseCMSCompactAtFullCollection is set to false
>>> the CMS generation tells GenCollectedHeap that CMS
>>> does not collect the young gen. So the young gen is
>>> collected first and then the CMS gen is collected. In
>>> this case the CMS gen gc_epilogue() is not called
>>> after the young gen collection and _eden_chunk_index
>>> is not cleared. The gc_epilogue() methods are called after the
>>> completion of the collection (after the CMS gen is
>>> collected). This is the expected behavior for when the
>>> gc_epilogue() is called.
>>> This fix adds a guard that checks if eden is empty,
>>> skipping eden processing if it is.
More information about the hotspot-gc-dev