Dmitry Chuyko is a performance engineer at BellSoft, which is among the top 5 contributors to OpenJDK. Before joining BellSoft, Dmitry programmed in Java, and then worked on Hotspot JVM in Oracle. After all, previous experience with Java has shown that the most interesting problems in applications get their solutions in the base platform. Currently Dmitry mostly optimizes OpenJDK for x86 and ARM, the company even implemented its own optimizing JEP 315 in Java 11.
BellSoft releases and supports Liberica JDK — a verified distribution of OpenJDK. Liberica is available in the form of binary assemblies, installers and container images for different operating systems and processors. Therefore, now the focus of attention is the work of various versions of Java in containers.
Dmitry speaks at large conferences such as Oracle Code One, Devoxx, GeeCON or JPoint, as well as at JUG meetups in different countries.
Do not put all eggs in one container
Containers are so good to run microservices. Nowadays, even an inexpensive cloud instance can run a large number of them. But why your services don’t start, work slow and die in silence? Proper diagnostic tools and newer Java clarify and vanquish that.
Microservice architecture and containerization have become the standards of modern application development. The challenges that developers face today are different from the problems that we used to solve earlier. Creators of the Java runtime respond to this with the appropriate functionality in the JDK. JVMs running in different containers compete for instance resources. Starting from Java 10, virtual machines know how to live in peace, this work has continued in Java 11 and onwards.
On the other hand, you now need to choose which base image to use. This includes the choice of operating system and Java runtime. OS images vary greatly in size and have their own characteristics, which must be taken into account. There are JVMs for every taste. And even within the OpenJDK framework, assemblies from different companies are available with different functionality and size. And you can create a custom runtime image.
We will consider the practical application of Java 11 functionality in a container environment typical for popular frameworks.