RFR(M) 8150721: Don't explicitly manage G1 young regions in YoungList

Mikael Gerdin mikael.gerdin at oracle.com
Tue May 3 11:43:18 UTC 2016



On 2016-05-03 11:21, Thomas Schatzl wrote:
> Hi Mikael,
>
> On Thu, 2016-04-28 at 14:37 +0200, Mikael Gerdin wrote:
>> Hi,
>>
>> Please review this change to change G1 to stop explicit tracking of
>> all
>> young regions in the YoungList class.
>> With JDK-8150393 the survivor regions are tracked in a
>> GrowableArray.
>> This removes the final dependency on keeping a linked list of young
>> regions in YoungList and this change is a cleanup to get rid of a lot
>> of
>> code related to that.
>>
>> There are a few notable changes due to this cleanup:
>> * During full GCs, calls to uninstall the surv rate group for young
>> regions were moved to TearDownRegionSetsClosure
>> * The young RSet sampling thread can no longer iterate over the young
>> list to sample RSets, it must instead walk the incremental collection
>> set. I would argue that this is more correct anyway since eden
>> regions which had not yet been added to the collection set would not
>> have any interesting RSets anyway.
>>
>> I decided to make eden and survivors two different classes for now,
>> since it's more clear that they are actually distinct that way.
>> The reason for keeping G1EdenRegions around when it's practically
>> empty is that I plan to move the eden SurvRateGroup object these
>> YoungList replacements to get rid of set_region_{eden,survivor}
>>
>> Webrevs:
>> Webrev for entire change
>> http://cr.openjdk.java.net/~mgerdin/8150721/webrev.0.full/
>
>    - there are significant merge errors due to recent changes.

I've rebased the patches
http://cr.openjdk.java.net/~mgerdin/8150721/webrev.0.rebased.full/

>
>    - pre-existing: in G1CollectedHeap::check_young_list_empty() there is
> no need to iterate over the regions if young_regions_count() is already
> zero. The method could also be made ASSERT only (or do the usual
> PRODUCT_ONLY decoration trick).

I suspect that the point of doing the iteration was to get the log_error 
for the regions which were erroneously young.
I can make the method and closure ASSERT only.

>
>    - the comment in line 5144 of g1CollectedHeap.cpp is out of date now.

Removed and slightly reworded the following comment.

>
>    - g1ConcurrentMark.cpp:313: s/comparision/comparison

Done

>
>    - I am not sure about the gain of the assert in
> line g1ConcurrentMark.cpp:313, but I won't object to have it.

The purpose is to ensure that it's safe to cast _claimed_survivor_index 
to uint.

>
>    - g1DefaultPolicy.cpp:399-401: I think the CR is not needed in 399,
> and the comment should be removed as it seems obsolete.

Agree, removed.

>
>    - in a follow-up CR, maybe change the name of youngList.* to
> something fitting the naming scheme.

I'll file a follow-up CR for the renaming and check with Stefan that 
he's ok with that approach.

>
>    - the includes in youngList.cpp should be trimmed down.

Will do.

/Mikael

>
> Thanks,
>    Thomas
>



More information about the hotspot-gc-dev mailing list