One benefit of pause-less garbage collectors such as Shenandoah and ZGC is that they can bound pause times to a few ms independent of heap sizes. An operational tradeoff is that the JVM must be configured with a much larger heap in order to assure pause-less operation, sometimes 3-5 times larger than would be required by a stop-the-world garbage collector. This is because extra memory is required to hold objects allocated during the times that garbage collection is concurrently running and to hold floating garbage that was allocated during the previous garbage collection pass but cannot be reclaimed until the end of the courrent garbage collection pass. Adding a second generation to Shenandoah allows typical young-generation garbage collection passes to complete in much less time than is required for traditional Shenandoah full garbage collection cycles. This means less memory is required for new allocations and floating garbage and fewer CPU resources are required by the concurrent GC worker therads. All of this translates into lower costs for capital and operations, lower energy consumption, and a greener planet.
This talk describes the motivation, design, and best-practice recommendations for making effective use of generational Shenandoah in your services that have timeliness constraints.
Kelvin is currently working as a Principal Software Engineer for the Amazon Corretto team where he leads the effort to add generational mode to the Shenandoah pause-less garbage collection system. In prior roles, he has worked as a university professor, founder and Chief Technology Officer of NewMonics, an early leading supplier of real-time Java for a broad variety of production deployments, and as the inventor of region-based real-time garbage collection.