Microsoft Build of OpenJDK – October 2022 PSU Release
We are happy to announce the latest patch & security update release for the Microsoft Build of OpenJDK. You can find the usual updates from the OpenJDK upstream community:
And you can also see the additional work that our team has put in place in our builds through the release notes. Starting with this release, developers can also see the exact changes we specifically made to our builds by inspecting the source code in our newly established Microsoft repositories for jdk17u and jdk11u.
New Experimental Feature
In this release, we have added a new experimental feature to improve the results of Escape Analysis by increasing the number of opportunities for Scalar Replacement. The goal of this feature is to simplify object allocation merges in order to promote Scalar Replacement of the objects involved in the merge. A simpler version of this enhancement has been added to JDK 11, whereas a version that exploits more opportunities has been added to JDK 17. Discussions on this optimization can be found in the hotspot-compiler-dev mailing list. For the latest, evolving version of this optimization, please see the Pull Request currently being reviewed on tip.
When testing the JDK 17 version of this optimization on internal benchmarks, we saw an increase in the number of Scalar Replacements of 3%-8% across multiple workloads, as well as increases in throughput of 2%. The JDK 11 version of this optimization has demonstrated an 8% decrease in average P99 latency in a memory-hungry production service. Further performance testing is pending.
To enable this feature, developers must use the following JVM flags:
Join the discussion on the new Escape Analysis work by visiting our respective GitHub repositories for Escape Analysis work on OpenJDK 11, and Escape Analysis work on OpenJDK 17.
Source code now on GitHub
Developers can see the changes we applied to our builds of OpenJDK by looking at the GitHub diffs between our source code, and the ones upstream for both OpenJDK 17 and OpenJDK 11:
We have been busy trying to get our internal mirror of OpenJDK out to where our community lives on GitHub and with the October release, we’ve finally achieved it. There will be a lot of work to get our processes in the state we’d like them coming over the next few months, but we are happy to finally be where developers want us to be. The only thing we’ve left internal is our build process for which we drive using Azure DevOps pipelines rather than the GitHub Actions workflows. Note that our Pull Request process has been altered to be fully out in the open and is like what is defined in the OpenJDK sources.
We have also updated our container images, and we now include Microsoft CBL-Mariner 2.0 as well as OpenJDK 8 images (based on CBL Mariner) with Eclipse Temurin binaries. Images are available in the following repository:
List of tags
|Base OS||OpenJDK 17||OpenJDK 11||OpenJDK 8|
|CBL Mariner 2.0||17-mariner||11-mariner||8-mariner|
|CBL Mariner 1.0||17-mariner-cm1||11-mariner-cm1||N/A|
|CBL-Mariner 2.0 Distroless||17-distroless||11-distroless||8-distroless|
More details can be found in the documentation.
Distroless images based on CBL-Mariner 2.0 are now ready and published. Details on how to use them can be found in the documentation.
If you have a need for AArch64 / Arm64 container images, please join the discussion on GitHub.
Announced back in April, we now have builds of OpenJDK for Alpine. Users who want to use Alpine inside containers must produce their own images – see documentation. Microsoft will not produce Alpine-based container images. Alternatively, users are encouraged to use the CBL-Mariner “Distroless” images instead.
Note on CBL-Mariner 1.0
The Microsoft distribution of Linux CBL-Mariner version 1.0 will be retired sometime in 2023. For that reason, the existing Mariner-based images of Microsoft Build of OpenJDK under tags 11-mariner and 17-mariner have already been updated to CBL-Mariner 2.0. Users who need to remain on CBL-Mariner 1.0 until then, must change their dependencies to the tags 11-mariner-cm1 and 17-mariner-cm1, knowing that these images will eventually be dropped.
Note on CBL-D
Following guidance from the Microsoft CBL-D team, we have unlisted – though it remains available for now – the CBL-D based images of Microsoft Build of OpenJDK. These images will no longer be updated, and users must move to CBL-Mariner 2.0 as soon as possible. Alternatively, users may opt to the Ubuntu-based images.
End of Life: Azul Zulu for Azure
Announced in June 30th, 2021, the Azul Zulu for Azure builds of OpenJDK are no longer supported and no longer updated. The repositories holding those binaries have been removed or will be removed at some point soon by Azul Systems. Users are urged to move to Microsoft Build of OpenJDK binaries for Java 11 and Java 17, or Eclipse Temurin for Java 8.