RFR: 8142402: G1 should not redirty cards in free regions
erik.helin at oracle.com
Wed Nov 25 13:15:23 UTC 2015
On 2015-11-11, Thomas Schatzl wrote:
> On Tue, 2015-11-10 at 16:36 +0100, Erik Helin wrote:
> > And StefanK spotted that we no longer need to use
> > G1CollectedHeap::heap() in G1RedirtyLoggedCardsTasks since we store a
> > pointer to G1CollectedHeap in the field _g1h. Please see new webrevs:
> > - incremental
> > http://cr.openjdk.java.net/~ehelin/8142402/webrev.01-02/
> > - full:
> > http://cr.openjdk.java.net/~ehelin/8142402/webrev.02/
> > Thanks,
> > Erik
I discovered (after some more testing) that the condition for when to
dirty cards is slightly wrong in this patch.
Since free_collection_set is run *after* redirty_logged_cards
(which is being called from post_evacuate_collection_set), the regions
will not be free when they are being processed by redirty_logged_cards.
Therefore, we should only dirty cards if the region won't be freed by
free_collection_set. A region will be freed if it is in the
collection set and has not had an evacuation failure.
Please see updated webrevs:
- inc: http://cr.openjdk.java.net/~ehelin/8142402/webrev.02-03/
- full: http://cr.openjdk.java.net/~ehelin/8142402/webrev.03/
- GC test suite will full verification
> looks good to me.
More information about the hotspot-gc-dev