Your Guide to Navigating OpenJDK in 2023
When Java was first created to program a remote control, the idea that it might someday become the basis of business for many world-spanning enterprises wasn’t even on the whiteboard. Today, however, Java is used by 80% of enterprises worldwide, with 3 billion active JVMs globally and 12 million developers building applications.
It’s a shame, then, that keeping up to date with the latest in Java can be a difficult proposition for a development team and their operations folks. It’s often advisable to use a vendor when building out your Java architecture, if for no other reason than to be sure that everyone in the organization is using the same versions and implementations of the language. Of course, service, support, timely security patches and bug fixes are an added bonus on top of that standardization.
Fortunately for the Java community at large, Java itself is open source and distributed under the General Public License (GPL) as OpenJDK. That means it is written and architected by the community of developers and vendors most interested in seeing Java advance as a technology. Like any programming language, however, there are a lot of moving parts, bits and bobs that have accrued into the platform over its almost 30-year history, and that means it can be tough to keep all that software in line and up to date.
Red Hat has been participating in OpenJDK since its inception, and one of the projects we’ve enjoyed seeing the community evolve has been around the compiled builds of the platform. Although IcedTea was the Java 8 Web Profile build available from the open source community, Java has come a long way since those early distributions.
Over time, the Eclipse Foundation evolved this work into the Adoptium Working Group. Today, OpenJDK builds are available for free from this working group, under the name of Temurin. The aim of the Temurin project and of the Adoptium Working Group is to not only provide binaries of OpenJDK, but also to extensively test the code associated with them.
The Adoptium Working Group combined the efforts of Red Hat, Microsoft, Amazon, Google and the community at large to produce not only Temurin, but also the AQAvit Project. AQAvit provides a collection of over 350,000 tests that go above and beyond the Java Test Compatibility Kit tests that were already used to certify Java implementation compliance.
AQAvit was designed to test real-world utilization patterns and requirements, and is so generically designed that it can be integrated into traditional Java application workflows as a suite of security and durability tests.
Red Hat also offers direct support of OpenJDK through a number of its products and channels. For instance, if you subscribe to Red Hat Enterprise Linux, you’ve got OpenJDK support already. If you pay to use a version of RHEL offered by your cloud provider, that also includes OpenJDK support.
If you’re looking to modernize your Java applications for the cloud, and you’re looking to lighten the loads your Java Application Servers are bearing, the Quarkus Project has taken on the task of bringing Java to containers and Kubernetes. Quarkus brings some more creative features to Java, ones that are specifically useful for developers building highly scalable cloud applications.
For example, traditional Java applications are long-running monoliths; thus, startup time isn’t a terribly important aspect of optimization. But container-based applications are constantly starting and stopping to meet scaling demands, and they save money when not in use. Thus, Quarkus offers a very fast startup time for applications. This also has the added benefit of shortening feedback loops for developers looking to see the results of their code changes.
And even though many Java applications would be considered semi-legacy today, that doesn’t mean there isn’t a lot of exciting innovation taking place underneath the hood. One major new improvement to Java overall has been the Java Flight Recorder (JFR), which allows for monitoring and profiling of Java applications without any modifications required.
There are a few issues for scaling JFR, however, especially around dealing with in-flight recordings. To help alleviate those issues, Red Hat sponsored the creation of the Cryostat Project. Cryostat securely manages your JFR recordings from your containerized workloads.
Elsewhere in the Java ecosystem, GraalVM continues to evolve and mature. This advanced optimizing compiler can make the development process easier and more performant, thanks to debugging, monitoring and profiling capabilities. And it’s not just limited to Java, GraalVM also supports R, Python and C. Red Hat has its own distribution of GraalVM known as Mandrel.
While we’ve been working to support and update Java both in the upstream community and in our own products for many years, we’re also heavily focused on the future of the language and the next generation of Java applications.
We have been contributing time and code toward this goal, as well. The Shenandoah Garbage Collector, for example, is one upstream project we’re interested in advancing. Red Hat has also contributed to the porting of the OpenJDK to 64-bit ARM. This low-pause garbage collector is aimed at making the task more predictable and consistent. Whether dealing with a heap that’s 200 GB or 2 GB, this new project should require the same amount of pause time for both. The end goal here is to uncouple pause times from heap size.
We’re also working on persistent memory support for Collections and on Project Lilliput. The latter project is aimed at reducing the Java object headers in the hotspot JVM from 128 bits down to 64 bits. This would reduce the memory footprint of the JVM and improve Java performance overall.
Of course, one of the biggest draws to modernizing Java applications is the appeal of the cloud. Bringing your Java applications into the cloud can be a transformative experience for both your developers and your IT teams. Quarkus can help with the move, but Red Hat also provides migration tools for helping with the process.
Regardless of how you decide to bring your Java ecosystem to the cloud, the same general steps can help with the transition. First, you’ll want to take inventory of all your Java systems. Then you’ll want to identify your most worthy candidates for the transition. Ideally, when you’ve identified a good Java application candidate, you can then use it as a model for the rest of your fleet.
While Java has a rich and illustrious history, it’s also got a bright future. The same companies that once fought over control of the platform and the server as a whole work together today to increase its power and reliability. Java is vastly more powerful now than it has ever been, and keying into those improvements is the best way to chart a path forward for your applications.
To learn more about Red Hat’s contributions to Java, visit our “All Things Java” page.