What's new in version 0.17.0

The following new features and notable changes since v 0.16.0 are included in this release:

Features and changes

Binaries and supported environments

OpenJ9 release 0.17.0 supports OpenJDK 8, 11, and 13. Binaries are available from the AdoptOpenJDK community at the following links:

Note: The Windows® and macOS® binaries from the AdoptOpenJDK community for OpenJDK 8, 11, and 13 have been updated to OpenSSL v1.1.1d. Look for the following release names to identify these packages:

  • OpenJDK 8: jdk8u232-b09.1_openj9-0.17.0
  • OpenJDK 11: jdk-11.0.5+10.1_openj9-0.17.0
  • OpenjDK 13: jdk-13.0.1+9.1_openj9-0.17.0)

Note: The last release of OpenJDK 8 and 11 from AdoptOpenJDK is Eclipse OpenJ9 0.15.1. To read about other features and changes in the VM since 0.15.1, check the Version 0.16.0 release notes too.

To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments.

New shared classes cache suboptions for layered caches

(Experimental, 64-bit only)

New suboptions are available for creating layered caches, where a cache builds on another cache with the same name. You can use these suboptions to save space when building a Docker container, for example.

Note: Because these suboptions are experimental, do not use them in a production environment.

The new options are:

New shared classes cache suboption to skip disk space check

When creating a persistent shared classes cache, the OpenJ9 VM checks that there is sufficient disk space available on the file system. For file systems that do not support the checking of free space, you can set the -Xshareclasses:noPersistentDiskSpaceCheck option, which causes the VM to skip the space checking operation. If there isn't enough disk space available when the cache is written, a SIGBUS or SIGSEGV signal occurs and the VM ends. For more information, see the -Xshareclasses:noPersistentDiskSpaceCheck option.

Option to share 'Unsafe' classes

Classes created through Unsafe.defineClass are now stored by default in the shared classes cache. You can use the -XX:-ShareUnsafeClasses option to change the default behavior. For more information, see -XX:[+|-]ShareUnsafeClasses.

Option to record class relationships in the verifier

A new command line option -XX:+ClassRelationshipVerifier allows you to record class relationships in the verifier, which avoids unnecessary class loading and reduces VM startup time. This is a new approach to bytecode verification that delays validating the relationships between classes until the classes are required to be loaded for a program's execution thus loading only those classes that are needed. For more information, see -XX:[+|-]ClassRelationshipVerifier.

Support for the IBM z15 processor

This release adds JIT compiler support for exploiting z15 instructions.

Digest algorithm is re-enabled

Issue #5611 is fixed, so support for the Digest algorithm is re-enabled. For more information about this support, see Cryptographic operations.

Direct Dump Reader (DDR) VM restriction removed

Prior to this version, you had to use a 32-bit VM to look at a 32-bit core, and a 64-bit VM to look at a 64-bit core when using DDR. This restriction has now been removed.

The format of the HOOKS section of a Java dump has changed

The format of the HOOKS section of a Java dump, which shows internal VM event callbacks, has changed:

  • Recorded times have been changed from milliseconds to microseconds to provide increased precision.
  • A new field, 3HKTOTALTIME, is included, which gives the total duration of previous events.
  • The hook data is now reset after each Java dump.

For more information and an example of the new format, see Java dump: HOOKS

LUDCL caching disabled by default

By caching the Latest User Defined Class Loader (LUDCL), Java applications that use deserialization extensively can see a performance improvement. This capability is controlled by the -Dcom.ibm.enableClassCaching system property and is now disabled by default due to issue #7332.

Note: Versions of the documentation before 0.17.0 incorrectly identified this property as disabled by default when it was actually enabled by default in the VM.

Full release information

To see a complete list of changes between Eclipse OpenJ9 v 0.16 and v 0.17.0 releases, see the Release notes.