RFR: 8254028: G1 incorrectly updates scan_top for collection set regions during preparation of evacuation
Stefan Johansson
sjohanss at openjdk.java.net
Thu Oct 8 18:48:25 UTC 2020
On Thu, 8 Oct 2020 08:52:20 GMT, Thomas Schatzl <tschatzl at openjdk.org> wrote:
> Hi all,
>
> can I have reviews for this change that makes values of G1RemSetScanState::_scan_top for regions in the initial
> collection set consistent with ones in optional collection set?
> So currently G1RemSetScanState::_scan_top is top() for regions in the initial collection set although they will never
> be scanned as enforced when dropping the remsets onto the card table. For the optional collection set, G1 sets scan_top
> manually to NULL when selecting the next few optional regions (using G1RemSet::exclude_region_from_scan()). When
> debugging this discrepancy recently posed some slight surprise for me, so I would like to change this. Also there is
> some risk that future code that relies on that property will be surprised. Testing: tier1-4; lots of kitchensink runs
> with JDK-8254164.
> Thanks,
> Thomas
I'm not to fond of the comment saying this is not really needed. After the fix for
[JDK-8252752](https://bugs.openjdk.java.net/browse/JDK-8252752) `prepare_region_for_scan()` don't do anything with
regions in the collection-set so I would prefer if we instead filtered those regions at the call-site.
In `G1PrepareRegionsClosure::do_heap_region(HeapRegion* hr)` we could add:
++
// Pepare regions not in the collection set for scanning.
if (!hr->in_collection_set()) {
_g1h->rem_set()->prepare_region_for_scan(hr);
}
This way we don't need to check for collection-set regions in the assert either. What do you think?
-------------
PR: https://git.openjdk.java.net/jdk/pull/557
More information about the hotspot-gc-dev
mailing list