Eclipse OpenJ9 user documentation

This documentation supports the configuration, tuning, and diagnosis of the OpenJ9 VM.

About this documentation

The Java virtual machine (VM) in IBM SDK®, Java™ Technology Edition was contributed to the Eclipse Foundation in 2017, forming the Eclipse OpenJ9 open source project. IBM SDK, Java Technology Edition, version 8 includes the Eclipse OpenJ9 VM from service refresh 5.

This material is based on the open source OpenJ9 documentation and should be used in conjunction with the IBM SDK, Java Technology Edition, v8 user guide and J9 VM reference in IBM Documentation.

General notes on this documentation

Modifications to OpenJ9 behavior

The IBM SDK includes the OpenJ9 VM but modifies its behavior in a few cases. The differences between OpenJ9 in the IBM SDK and an unmodified OpenJ9 VM are already reflected in this documentation but are summarized here for reference:

Cryptographic operations

The IBM SDK contains the IBM implementation of the TLS and SSL protocols, whereas OpenJ9 uses the OpenSSL open source library.

Class data sharing

Class data sharing is disabled by default in the IBM SDK. In OpenJ9, class data sharing is enabled by default for bootstrap classes, unless the application is running in a container.

In the IBM SDK, the default shared classes cache directory on AIX® and Linux is always /tmp/javasharedresources. In OpenJ9, the default directory on AIX and Linux is javasharedresources in the user's home directory, unless you also specify the groupAccess suboption.

The following OpenJ9 options and suboptions are not yet available or supported in the IBM SDK:

Direct byte buffers

The IBM SDK does not limit the amount of native memory that is used for direct byte buffers. OpenJ9 does set a limit, of approximately 85% of the maximum heap size.

Trace formatter command

The trace formatter command is slightly different:

Behavior of StringBuffer and StringBuilder objects

In OpenJ9 version 0.19.0, the way that StringBuffer and StringBuilder objects grow changed and the -Djava.lang.stringBuffer.growAggressively system property was introduced to revert to the original behavior. There is no behavior change in the SDK, but this system property is still available.

Heap size

In OpenJ9 version 0.20.0, the default value for the maximum heap size (set by the -Xmx command-line option) changed, and the -XX:[+|-]OriginalJDK8HeapSizeCompatibilityMode command-line option was introduced to revert to the original default value. There is no change in the default value of -Xmx in the SDK, but the new command-line option is still available.

Behavior of -Xlog

In OpenJ9 0.24, the -Xsyslog command was created to take over from the -Xlog command, which was changed for better compatibility with the reference implementation. The -XX:[+|-]LegacyXlogOption option was added to revert -Xlog to its previous behavior. In the SDK, the -XX:+LegacyXlogOption option is set by default so that there is no change to behavior in the SDK.

Dump extractor tool, jextract

In OpenJ9 0.26, the jextract tool was deprecated and replaced by the jpackcore tool. This change does not apply to the SDK; the jextract tool remains as before.