Red Hat lifts lid on high-performance garbage collector
Shenandoah, proposed to OpenJDK, can handle heaps larger than 100GB with sub-10ms pause times.
Hat researchers have officially submitted their new garbage
collector for inclusion in the OpenJDK.
Not quite a pauseless garbage collector, Shenandoah is being
touted as having “ultra-low-pause-time”, and is optimised to run
well with exceptionally large memory heaps. According to their
Proposal (JEP), the creators aim to produce a GC that can
provide sub-10ms pause times with heaps larger than 100GB.
Shenandoah (a Native American word meaning deer, and the name of
across the US, in case you were wondering) achieves this by
doing evacuation work concurrently with Java threads and making
pause times independent of heap size.
An obvious comparison is the garbage collector in Zing, the
proprietary JVM by Azul systems. While Red Hat’s version is not
truly pauseless like Zing’s GC, it will be fully open source and
(if approved) integrated into the OpenJDK.
The project is the work of Christine Flood and Roman Kennke,
software engineers at Red Hat. Kennke has blogged and
publicly about it previously, but this is the first real step
towards making Shenandoah publicly available.
While the 100GB heap figure may be impressive, an
earlier blog post from Kennke suggests that the pair were
initially even more ambitious, hoping to support terabyte-sized
heaps. He did however finish the same blog post with a disclaimer
that there were “a lot of hairy issues to resolve”.
The current aim, according this week’s proposal, is “a
performance penalty of no more than 10% over the current collectors
on applications with no GC pauses and no perceivable performance
penalty when running any of the current collectors.” Additional
technical details can be found in Kennke’s series of blog
The authors also warn that Shenandoah is “not the one GC to rule
them all”, and that for those with heaps smaller than 20GB or
running with fewer than eight cores, it may not be of much use.
Photo by Anathea