RFR: Reset coalesce and fill boundary during global collect

William Kemper wkemper at openjdk.java.net
Thu Oct 14 22:59:23 UTC 2021


On Thu, 14 Oct 2021 22:27:49 GMT, William Kemper <wkemper at openjdk.org> wrote:

> Normally, this happens during cset selection for the old generation. It also needs to happen for coalesce and fill at the end of global collections or objects may not be filled.

We don't need it to re-register live objects, we need it to fill in the dead objects. The sequence of events looks like this:
1. FREE region services an allocation request and calls `finish_coalesce_and_fill` (this sets fill boundary to `_end`).
2. Global collection happens, dead objects in old regions outside of cset are coalesced. Coalescing begins from the coalesce boundary and walks objects until `_end`. But for regions in the state from step 1, coalescing does _nothing_ (`heap->card_scan()->coalesce_objects()` isn't even called).
3. Young generation remembered set scan attempts to iterate dead objects that should have been filled in step 2 and goes off the rails.

-------------

PR: https://git.openjdk.java.net/shenandoah/pull/90


More information about the shenandoah-dev mailing list