I am excited to announce that the OpenJ9 0.20.0 JDK 11 release contains an early access version for ARM AArch64 Linux platforms! This release begins to bring the same performance, features, and stability of the OpenJ9 Java VM already available on other platforms to 64-bit ARMv8 processors.
The work builds upon the AArch64 operating system and Just-In-Time (JIT) compiler support built into the Eclipse OMR project. This is the first new processor target for OpenJ9 and is an important proof point to demonstrate the adaptability and portability of OpenJ9 technology to new environments.
We have made the binaries available at AdoptOpenJDK so that others can begin to experiment with OpenJ9 in their AArch64 environments, provide feedback to the community to improve it, or participate in the development process. Early access versions are available for compressed references heap (up to 57 GB) and large heap configurations on Linux.
While there are more development features still to come to deliver the same startup and throughput performance that OpenJ9 is known for on other platforms, you can download the early access builds to take advantage of OpenJ9’s small memory footprint desired by many AArch64 environments.
Our implementation has been extensively tested on a wide range of AArch64-enabled devices from bare metal servers to Raspberry Pi 3’s and 4’s (including on the recently released Ubuntu 20.04 LTS) and the NVIDIA Jetson Nano.
Here are Duke and Duchess celebrating a successful OpenJ9 bringup on a Raspberry Pi!
The OpenJ9 community continues to work toward making AArch64 a first-class platform suitable for production environments. To that end we are busy working on a number of features, including:
- Improvements to the JIT compiled code performance. While functionally stable, there are several performance enhancements to be enabled in the AArch64 JIT to bring it to the same level of capability as other platforms. This includes features such as dynamic method recompilation, enabling Ahead Of Time (AOT) compilation by default, optimized exploitation of AArch64 instructions, and implementing faster runtime code sequences to minimize callbacks into the OpenJ9 VM (for write barriers, object allocations, etc.)
- Full support for garbage collection policies such as balanced and concurrent scavenge. Generational concurrent (gencon) and flat heap (optthruput) are already available in the early access builds.
- Support for JDK 14 and beyond.
These changes will appear incrementally in OpenJ9 over the coming weeks as they are completed.
In addition to our planned development activities we are also exploring additional capabilities such as JDK8 support and Windows 10 support.
I encourage anyone interested in AArch64 to download and try it out for your application. Your feedback at OpenJ9 (either on the Slack workspace (join here) or via a GitHub issue) is always welcome and appreciated!
If you’re a developer keen to help move this implementation forward, your participation is encouraged! Just search for “Help Wanted” AArch64 labeled issues in the OpenJ9 GitHub repository.
Stay tuned for continual improvements!
Also worth mentioning that these arm64 OpenJ9 builds also run on the Windows Sysbsystem for Linux (WSL) on Windows/aarch64 😀 https://twitter.com/sxaTech/status/1237409084518871041