RFR: Fix freeze on OOM during evacuation

Roman Kennke rkennke at redhat.com
Sun Dec 18 13:24:46 UTC 2016


The run_service() loop in ShenandoahConcurrentThread can still deadlock
when OOM happens during evacuation: when we get out of final-mark, but
have not yet started the GC threads, a Java thread could OOM and the
ShenandoahConcurrentThread never get to resetting the evacuation-in-
progress flag. The Java thread would wait forever and not get to a
safepoint, while the GC waits for Java threads to get to safepoint for
the next pause.

The change fixes it by always resetting the evac flag when coming out
of service_normal_cycle().


Tested by running SPECjvm in a loop 24hours and jcstress.

http://cr.openjdk.java.net/~rkennke/fix-oom-evac/webrev.00

Ok to push?

Roman


More information about the shenandoah-dev mailing list