Virtualization Technology News and Information
Java version upgrades and how the right vendor can improve your Java journey

By Dmitry Chuyko

Java remains among TOP-3 most popular programming languages because it adapts rapidly to the developers' needs and provides excellent backward compatibility so that IT teams can integrate new Java versions into the project without disrupting it.

But curiously, more than half of applications ran on JDK 8 and 11 in 2022 (46.45 % and 48%, respectively) despite the LTS JDK 12 release in 2023.

Why do enterprises prefer keeping to older JDK versions? What do they miss out on? And how do you enhance the corporate Java experience regardless of the version? Read on to find out!

Java (r)evolution

Since its first release in 1996, Java has undergone substantial changes to make it more development-friendly, performant, and secure.

For instance, at the dawn of Java's life, it was considered much less performant than C or C++, but years of enhancements brought it to a similar efficiency level. And although it still starts up slower than some other languages, the Native Image technology introduced with GraalVM  and the Coordinated Restore at Checkpoint (CRaC) Project help to overhaul this barrier, too.

When the cloud and containerization came into the picture, early Java versions, including JDK 8, weren't cut out for containers. But with every release, Java became more container aware: it learned to detect resource limits, for instance, and received the Alpine Linux port that enables developers to create microcontainers saving precious cloud resources.

Another field of continuous improvement is garbage collection. Java GC not only saves developers a lot of worry about memory monitoring. It is also a powerful and the most important tool for performance tuning. Proper selection and adjustment of a GC implementation helps to decrease pause time and enhance user experience. No wonder Java garbage collectors receive updates and new capabilities with every release. To illustrate, G1GC has been around since Java 7, but it continues to evolve. In JDK 17, it boasts parallel FullGC, NUMA-aware allocation, concurrent cleanup, and a better heap sizing algorithm.

And a low-latency ZGC was improved in JDK 21 to reduce the GC CPU overhead and heap memory overhead.

Java development is getting more secure as well. For instance, JDK internals are strongly encapsulated starting with JDK 17 (although this process commenced with modularity in JDK 9) to enhance JDK integrity and avoid compromising its security.

Challenges of migration and risks of staying behind

The reason companies don't upgrade right away

If newer Java versions are associated with significant performance and security gains, why do IT teams not migrate immediately after each JDK release? The problem is that every version means changed, added, or deleted features and APIs, which entails code refactoring to eliminate errors and avoid unpredictable application behavior.

There are currently three feature releases between the LTS versions (and five between JDK 11 and 17), so the path toward Java version upgrade isn't taken in baby steps but rather in one giant leap into the unknown: how will the application behave after the upgrade, what kind of errors will creep out, how long will it take to restore the normal operation?

Furthermore, certain tools used in enterprise developments spawn additional issues related to migration. For example, software product licenses can sometimes be tied to a specific Java version. Upgrading to another JDK release requires buying a new license or transferring workloads to another solution.

LTS or long-term support releases exist because production stability is more important than new features. There's a certain similarity between LTS software versions and a major purchase in everyday life (a car, for instance). Few people buy a new vehicle every two years even if new models promise reduced fuel consumption or a modern dashboard design: tried-and-true and predictable is sometimes better than state-of-the-art but unfamiliar.

Risks and missed profits of sticking to legacy Java versions

Although LTS versions are meant to be utilized for several years, keeping to them for too long will eventually put IT teams between the devil and the deep blue sea, namely the security risks and blunt competitive edge.

Apart from general enhanced safety of newer Java versions, the security risks are related to vulnerabilities nested in outdated software. For instance, if the corporate project is based on unsupported Java 6(7), it contains multiple CVEs and becomes an easy target for cybercriminals. The same could be said of workloads running on free Oracle Java 8 issued before Oracle decided to stop releasing free builds for Java SE 8 for commercial use.

To make your Java migration easy and satisfying, it is worth reaching out to the OpenJDK vendor to guide you through all the layers of the complex process. While still staying on old JDK versions, using supported versions of JDK 6, 7, or 8 is highly advisable. BellSoft continues to support these versions to deliver the extra time needed for the companies to proceed with large-scale migrations. Supported JDK versions guarantee timely updates and security of your application.

The relevance of increased performance depends on the workload. A simple application running on a single server may do with an older JDK. But suppose the company is building a cloud infrastructure or planning to scale the application to meet the growing market demands. In that case, the latest Java versions will be of greater use thanks to better container awareness, garbage collection, and other features that make Java applications faster and more efficient. As such, LTS JDK 17 is incredibly stable and receives updates and fresh titbits that don't usually make it to JDK 11 and JDK 8. For instance, enhanced GC algorithms in newer Java versions help to drastically minimize latency compared to older versions, which is the most important metric for user experience. The users won't wait a minute for a website to load. They will close the tab and find another similar service.

In addition, adherence to older Java versions leads to the inability to upgrade other tools and frameworks, fresh versions of which also come with substantial perks.

Java applications based on old LTS releases have many restrictions in their performance as Java has moved forward with its innovation, and its current value is hidden in its multilevel modern features. To make your Java complete and capable of reaching modern realities while not upgrading to new LTS releases,BellSoft has created Liberica JDK Performance Edition. Liberica JDK Performance Edition is an instant bridge between your old Java 8 or 11 and leveling up its performance to JDK 17 or 21.

The right OpenJDK vendor for a smooth Java journey at your own pace

Whether businesses make a strategic decision to stay on a given Java version as long as possible for the sake of production stability or aren't ready yet to allocate time and human resources to perform the upgrade, the risks and missed opportunities associated with legacy software are not going anywhere. Therefore, finding the right balance between preserving stability and embracing technological advances is crucial.

The most viable solution to this issue is to select an OpenJDK vendor who will accommodate all technological and business needs of a given enterprise by providing

  • Support for all Java releases, including all LTS and legacy Java 6 & 7, so that the runtime receives necessary patches and fixes regardless of the version (and sometimes a complex project may run on different Java versions);
  • Additional utilities to boost the performance of Java applications without upgrading the Java version. For instance, Liberica JDK Performance Edition couples JDK 11 and JDK 8 with JVM 17 and thus enables enterprises to leverage the JDK 17-grade performance without upgrading the Java version.

This way, IT teams can unify the Java stack, reducing support expenses and ensuring they receive essential updates and keep to the established KPIs while planning the upgrade at their convenience.



Dmitry Chuyko 

Dmitry Chuyko is a Senior Performance Architect at BellSoft, an OpenJDK committer, and a public speaker. Prior to joining BellSoft, Dmitry worked on the Hotpot JVM at Oracle, and before that he had many years of programming experience in Java. He is currently focused on optimizing HotSpot for x86 and ARM, previously being involved in rolling out JEP 386, which enables the creation of the  smallest JDK containers. Dmitry continues his journey in the containerization process and is happy to share his insights and expertise in this field. Dmitry is a well-known speaker in the Java community, and one of his recent public presentations is available here.

Published Tuesday, May 07, 2024 7:29 AM by David Marshall
Filed under: ,
There are no comments for this post.
To post a comment, you must be a registered user. Registration is free and easy! Sign up now!
<May 2024>