RFR: Partial GC

Roman Kennke rkennke at redhat.com
Mon Mar 13 17:48:13 UTC 2017

This implements a skeleton partial GC. Skeleton meaning it seems to work
for most stuff I throw at it, but is totally not optimized (not even
benchmarked) yet.

The heuristics also require more through. Currently the partial GC is
started whenever ShenandoahAllocationThreshold percent of heap capacity
have been allocated since last GC (partial or full). It then selects all
regions that have <= ShenandoahPartialInboundThreshold direct root
regions into the collection set. The direct inbound regions of the cset
regions form the (new) root region set.

Partial GC is implemented fully stop-the-world for now. Each GC thread
first scans GC roots (threads, etc), then goes on to scan root regions,
and, interleaved with that, completes the closure by processing its
local task queue. No work stealing for now. (should be easy to do...)

Partial GC performs no concurrent GC for now. In order to do this, we'd
need eager updating of references (so that we don't have any from-space
refs when entering partial GC), or a way to deal with from-space refs
during partial-GC/matrix-bookkeeping.

Partial GC is activated by -XX:ShenandoahGCHeuristics=partial.

What do you think? Ok to push?



More information about the shenandoah-dev mailing list