RFR: 8183281: Remove unnecessary call to increment_gc_time_stamp

Stefan Johansson stefan.johansson at oracle.com
Mon Jul 3 08:38:47 UTC 2017



On 2017-06-30 17:34, Erik Helin wrote:
> On 06/30/2017 01:53 PM, Stefan Johansson wrote:
>> Hi Erik,
>>
>> On 2017-06-30 11:37, Erik Helin wrote:
>>> Hi all,
>>>
>>> the following small patch removes an unnecessary call to
>>> increment_gc_time_stamp from
>>> G1CollectedHeap::do_collection_pause_at_safepoint (and the long,
>>> wrong, comment above the call).
>>>
>>> We already do a call increment_gc_time_stamp much earlier in
>>> do_collection_pause_at_safepoint, which is enough. The reasons
>>> outlined in the comment motivating a second call is no longer true,
>>> the code has changed (but the comment has not).
>>>
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8183281
>>> Patch: see below
>>> Testing: make hotspot
>>>
>> Patch looks good, but I would like to see some more testing than just
>> building hotspot. Running the gc jtreg tests for example.
>
> Thanks for reviewing! All pass for both fastdebug and product when 
> running `make test TEST=hotspot_gc` on my Linux workstation.
>
Thanks for running the tests, ship it!
StefanJ
> Thanks,
> Erik
>
>> Thanks for cleaning up the code,
>> Stefan
>>> Thanks,
>>> Erik
>>>
>>> # HG changeset patch
>>> # User ehelin
>>> # Date 1498814642 -7200
>>> #      Fri Jun 30 11:24:02 2017 +0200
>>> # Node ID 62400b3cbec4e0d06e0d6c21c9486070d8c906a4
>>> # Parent  10ccf0a5f63fdca04d9eda2c774ccdd0e12bc1a1
>>> 8183281: Remove unnecessary call to increment_gc_time_stamp
>>>
>>> diff -r 10ccf0a5f63f -r 62400b3cbec4
>>> src/share/vm/gc/g1/g1CollectedHeap.cpp
>>> --- a/src/share/vm/gc/g1/g1CollectedHeap.cpp    Thu Jun 29 19:09:04
>>> 2017 +0000
>>> +++ b/src/share/vm/gc/g1/g1CollectedHeap.cpp    Fri Jun 30 11:24:02
>>> 2017 +0200
>>> @@ -3266,29 +3266,6 @@
>>>
>>>          MemoryService::track_memory_usage();
>>>
>>> -        // In prepare_for_verify() below we'll need to scan the 
>>> deferred
>>> -        // update buffers to bring the RSets up-to-date if
>>> -        // G1HRRSFlushLogBuffersOnVerify has been set. While scanning
>>> -        // the update buffers we'll probably need to scan cards on the
>>> -        // regions we just allocated to (i.e., the GC alloc
>>> -        // regions). However, during the last GC we called
>>> -        // set_saved_mark() on all the GC alloc regions, so card
>>> -        // scanning might skip the [saved_mark_word()...top()] area of
>>> -        // those regions (i.e., the area we allocated objects into
>>> -        // during the last GC). But it shouldn't. Given that
>>> -        // saved_mark_word() is conditional on whether the GC time 
>>> stamp
>>> -        // on the region is current or not, by incrementing the GC 
>>> time
>>> -        // stamp here we invalidate all the GC time stamps on all the
>>> -        // regions and saved_mark_word() will simply return top() for
>>> -        // all the regions. This is a nicer way of ensuring this 
>>> rather
>>> -        // than iterating over the regions and fixing them. In 
>>> fact, the
>>> -        // GC time stamp increment here also ensures that
>>> -        // saved_mark_word() will return top() between pauses, i.e.,
>>> -        // during concurrent refinement. So we don't need the
>>> -        // is_gc_active() check to decided which top to use when
>>> -        // scanning cards (see CR 7039627).
>>> -        increment_gc_time_stamp();
>>> -
>>>          if (VerifyRememberedSets) {
>>>            log_info(gc, verify)("[Verifying RemSets after GC]");
>>>            VerifyRegionRemSetClosure v_cl;
>>




More information about the hotspot-gc-dev mailing list