RFR: Concurrent partial should clean up properly on cancellation

Aleksey Shipilev shade at redhat.com
Tue Oct 10 11:30:29 UTC 2017


http://cr.openjdk.java.net/~shade/shenandoah/concpartial-cleanups/webrev.01/

Suppose we have done init-partial, exited, and about to go to conc-partial, but allocation failure
happens and we slide to full gc; then, task queues populated during init-partial would stay put, and
we fail the assert that checks their emptiness on *next* partial cycle. Note that the similar thing
happens after init-mark cancellation, but there, Full GC code cleans up the task queues, because it
shares them with the concurrent mark.

I think this is the symptom of a larger problem: on cancellation, partial GC should clean up all its
mess, if possible. If not possible, Full GC code should assist. Cleanups should not include only TQ
clears, but also other cleanups. (With the notable exception of cset, which Full GC handles
separately by fixing up the references there).

Testing: hotspot_gc_shenandoah (failing tests now pass)

Thanks,
-Aleksey



More information about the shenandoah-dev mailing list