Moving Jenkins to a New Frontier of Performance with Java 11 - DevOps World 2022
It’s 2022, and the Jenkins project is approaching 18 years old, boasts over 1,800 plugins and over 1 million users around the world, and is widely considered the most popular automation server in use today. The latest hurdle we’ve cleared was delivering Java 11 support, partially motivated by Oracle’s ending of public support for Java 8 back in March of 2022.
So what does this mean exactly? Well, for starters, Java 8 was released in 2014 and had become outdated in terms of new features and security enhancements that were happening in many key third-party libraries consumed by the Jenkins project. The requirements to move to Java 9, Java 10, or Java 11 were becoming more and more painful from a development standpoint. This led to an unprecedented response from Oracle, stating they would extend fee-based support for JDK8 into 2030. However, the benefits of moving to newer versions of Java were clear, most notably surrounding performance.
It’s one of the core tenets of the programming language, removing the complexity of memory management from the developer’s responsibilities. At the core of the JVM (Java Virtual Machine) is the garbage collector. The garbage collector frees up memory when objects are no longer needed, allowing space for new objects to be created. While the G1GC garbage collector is our recommended GC for Jenkins, it was not the default for Java 8. Only in Java 9 and later did G1GC become default. Now with Java 11 there are many improvements to the G1GC collector which deliver significant gains in performance.
Join us at DevOps World in-person this year in Orlando, Florida, where Dylan Dewhurst and I will be presenting our learnings about the benefits of moving Jenkins from Java 8 to Java 11. We will provide data showing the performance improvements this shift has brought. We will showcase some experimental garbage collectors that we hope to see utilized in the next generation of JVM’s, and we will show you how to move your Jenkins instance from Java 8 to Java 11 successfully.