RFR(S): 7143490: G1: Remove HeapRegion::_top_at_conc_mark_count

Bengt Rutisson bengt.rutisson at oracle.com
Sun Apr 8 13:51:17 UTC 2012


Hi John,

Thanks for the very detailed explanation! Sounds really good.

Ship it!
Bengt

On 2012-04-06 23:19, John Cuthbertson wrote:
> Hi Bengt,
>
> Thanks for looking over the changes. Your question is a good one. 
> Hopefully I can answer it to your satisfaction.
>
> The original liveness counting code walked marking bitmap (i.e. the 
> set bits) for the live objects between _top_at_conc_mark_count and 
> NTAMS. At the start of marking, _top_at_conc_mark_count was set to 
> start of the region.  In the event of an evacuation failure while 
> evacuating the objects in a region, R, not all the objects will have 
> been evacuated. So we would tell the counting code to revisit this 
> region bey setting _top_at_conc_mark_count to the region bottom. Any 
> non-evacuated explicitly marked objects would then be walked by the 
> counting code. Any explicitly marked objects that were successfully 
> evacuated would have had their marks propagated so that the new 
> location was marked, and the old marks would have been cleared.
>
> As a result of Tony's marking changes this whole mechanism changed. 
> Now if an evacuation failure occurs during an initial mark pause - any 
> non-evacuated objects in the region are explicitly marked and NTAMS is 
> set to top. Successfully evacuated objects will be copied above NTAMS 
> of the to-space region. When the non-evacuated objects are marked - 
> they will be included in the liveness counting. Objects that are 
> copied above NTAMS are included during the finalization of the 
> liveness counting during cleanup.
>
> The finalization of the liveness counting did include the range 
> [_top_at_conc_mark_count, NTAMS), but since the remark pause set 
> _top_at_conc_mark_count to NTAMS this interval was usually empty. If 
> we did get an evacuation failure during marking (and post remark) then 
> _top_at_conc_mark_count would have been reset. The only issue with 
> this is that we would include the objects in the region that got the 
> evacuation failure twice in the liveness counting data (once as a 
> result of an explicit mark (or successful copy) and the other from the 
> finalization code). This would look like we had more live data than we 
> actually did. When the original liveness counting changes were added 
> we knew that we would lose some accuracy. Removing the field will 
> reduce this inaccuracy.
>
> Does this answer your question?
>
> Thanks,
>
> JohnC
>
> On 04/03/12 06:04, Bengt Rutisson wrote:
>>
>> Hi John,
>>
>> I think your changes look good.
>>
>> Just a question for my understanding. You say "The value of 
>> _top_at_conc_mark_count is now the same as NTAMS". You are probably 
>> correct, but in HeapRegion::note_self_forwarding_removal_start() the 
>> old code was:
>>
>>  if (during_initial_mark) {
>>     ...
>>     _next_top_at_mark_start = top();
>>     set_top_at_conc_mark_count(bottom());
>>     ...
>>
>> Here we set NTAMS and _top_at_conc_mark_count() to different values. 
>> I assume that this did not have any effect, but can you explain why?
>>
>> Thanks,
>> Bengt
>>
>> On 2012-04-03 01:45, John Cuthbertson wrote:
>>> Hi Everyone,
>>>
>>> Here's my contribution to the cleanup week.
>>>
>>> Can I have a couple of volunteers review the changes for this CR? 
>>> The webrev can be found at: 
>>> http://cr.openjdk.java.net/~johnc/7143490/webrev.0/
>>>
>>> Summary:
>>> As a result of Tony's recent marking changes (associated with the 
>>> marking of survivors) the field HeapRegion::_top_at_conc_mark_count 
>>> is no longer required. The value of _top_at_conc_mark_count is now 
>>> the same as NTAMS. Additionally I simplified the verification code 
>>> that sets the bits in the live card bitmap and refactored the 
>>> closures that finalize and verify the liveness counting data to 
>>> avoid code duplication.
>>>
>>> Testing: I inserted a 500ms sleep in the marking cycle between the 
>>> remark and cleanup pauses to ensure that at least one evacuation 
>>> pause was seen during this phase, and ran the GC test suite with 
>>> several marking thresholds (2, 5, and 10%) and verification enabled.
>>>
>>> Thanks,
>>>
>>> JohnC
>>
>




More information about the hotspot-gc-dev mailing list