Understanding and Improving JVM GC Work Stealing at the Data Center Scale
Garbage collection (GC) is a critical part of performance in managed run-time systems such as the OpenJDK Java Virtual Machine (JVM). With a large number of latency sensitive applications written in Java the performance of the JVM is imperative. Java application servers run in data centers on a large number of multi-core hardware. Thus load balancing in multi-threaded GC phases is critical. Dynamic load balancing in the JVM GC is achieved through work stealing, a well known and effective method to balance tasks across threads. This paper analyzes the JVM work stealing behavior, and introduces a novel work stealing technique that improves performance, GC CPU utilization, scalability, and cost of Jobs running on Google’s data-centers. We analyze both the Dacapo benchmark suite as well as Google’s data-center jobs. Our results show that the Gmail front-end server shows a 15-20% GC CPU reduction, and a 5% CPU performance improvement. Our analysis of a sample of ~59K jobs shows that GC CPU utilization improves by 38% geomean and 12% weighted geomean, GC pause time improves by 16% geomean, 20% weighted geomean and full GC pause time improves by 34% geomean, 12% weighted geomean.