RFR: Degenerated evacuation

Aleksey Shipilev shade at redhat.com
Tue Sep 4 11:10:30 UTC 2018


http://cr.openjdk.java.net/~shade/shenandoah/degenerated-evac/webrev.01/

Recent evac-reserve work enables us to do proper degen-evac without going to Full GC right away. It
is possible now, because allocation failure means depleted "mutator view", but evac-reserve should
be still enough to get evacuations going. This fixes the last wrinkle in degeneration scheme for
normal cycle. (We would need to take a look at degen-traversal later).

The webrev above contains verification and tests changes along with the actual degen-evac change.
Those helped to diagnose one degen-evac bug.

Sample run of Compiler.compiler with very dense heap:

Trigger: Average GC time (111.81 ms) is above the time for allocation rate (124.07 MB/s) to deplete
free headroom (0M)
GC(1593) Pause Init Mark 0.288ms
GC(1593) Concurrent marking 525M->921M(1024M) 94.232ms
GC(1593) Pause Final Mark 0.560ms
GC(1593) Concurrent cleanup 921M->925M(1024M) 0.182ms
Failed to allocate 512K
Cancelling GC: Allocation Failure
GC(1593) Concurrent evacuation 926M->996M(1024M) 7.103ms
Trigger: Handle Allocation Failure
GC(1594) Pause Degenerated GC (Evacuation) 996M->872M(1024M) 48.612ms ; <--- Not Full GC anymore
Trigger: Free (33M) is below minimum threshold (102M)

Testing: tier3_gc_shenandoah, ad-hoc tests with forced degen-evac

Thanks,
-Aleksey




More information about the shenandoah-dev mailing list