RFR: Degenerated GC mode for Traversal

Roman Kennke rkennke at redhat.com
Wed Mar 21 13:04:12 UTC 2018


This implements degenerated GC for traversal.

The idea is that if alloc fails during concurrent traversal, we slide
into the degenerated pause, immediately drop the cset (and thus avoid
any further evacuation), but continue traversal with the taskqueues that
we have. This completes traversal of all live objects, and count
liveness for everything, including in the previously cset regions. At
the end of it, we reclaim every region that has zero live objects (i.e.
anything previously cset that's traversed during degen will not get
reclaimed).

I added special branch in process_oops() because we still need to update
refs even for non-cset (or rather, no-more-cset) reginos.

For pretty much the same reason I added a fixup_roots() that is slightly
different from the one in ShHeap.

Passes hotspot_gc_shenandoah

http://cr.openjdk.java.net/~rkennke/traversal-degen/webrev.01/

Ok?

Roman



More information about the shenandoah-dev mailing list