Performance of Microservices on different JVMs

Pandora Foyer

A lot is happening in the world of JVMs. Oracle changed its support policy roadmap for the Oracle JDK. GraalVM has been open sourced by Oracle. AdoptOpenJDK provides binaries and is supported by (among others) Azul Systems, IBM and Microsoft. Large software vendors provide their own supported OpenJDK distributions such as Amazon (Coretto), RedHat and SAP (SapMachine). Next to Oracle JDK and OpenJDK there are also different JVM implementations such as Eclipse OpenJ9 and Azul Systems Zing. JDK major and minor versions have differences and the JDK might run directly on the OS or within a container. Next to that, JVMs support different garbage collection algorithms which influence your application behavior. There are many options for running your Java application and the choices you make matter! Performance is an important factor to take into consideration when choosing your JVM. How do the different JVMs compare with respect to performance when running different Microservice implementations? Does a specific framework provide best performance on a specific JVM implementation? I’ve performed elaborate measures of (among other things) start-up times, response times, CPU usage, memory usage, garbage collection behavior for these different JVMs with several different frameworks such as Reactive Spring Boot, regular Spring Boot, Spring Fu and MicroProfile.

During this presentation I will describe the test setup used which includes Prometheus and Grafana. I will show you some remarkable differences between the different JVM versions and implementations. This will help choosing the JVM with the right characteristics for your specific use-case!