By replacing various stop-the-world phases of traditional OpenJDK garbage collectors with concurrent Shenandoah GC phases that allow multiple application threads to run concurrently with multiple GC threads, it is now possible to configure JVM deployments of common workloads to never experience GC pauses any longer than ten ms. However, configuring a JVM to run "pause free" with Shenandoah or other available concurrent GC algorithms such as ZGC typically requires a much larger heap than is required with more traditional GC approaches. Whereas traditional GC runs reliably with heap utilization of 75% or higher, configuring Shenandoah GC to not experience pauses longer than 10 ms often requires heap utilization no greater than 30%.
A group of Corretto JVM engineers at Amazon has been working for the past year on adding generational support to Shenandoah GC, with the expectation that generational Shenandoah GC will allow pause-free JVM configurations even with heap utilization of 65% and higher. This talk describes some of the workloads that have motivated the generational Shenandoah effort, provides an overview of the algorithms and heuristics that are being implemented and offers a summary overview of the work plan, including the most recent experimental results.