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
- Some topics in this documentation are longer than a typical IBM Documentation topic page. For usability, we recommend enabling the full IBM Documentation Table of contents where additional entries are included to aid navigation. The Table of contents can be toggled on and off by using the arrow icon in the bottom-left corner of the screen, at the bottom of the side-bar.
- Because this documentation originates from the open source project there might be some references to features and settings that apply to later versions of Java SE. These references, which are typically marked with icons, should be ignored. For example, This sentence applies only to Java 17 or later runtime environments that include the OpenJ9 VM.
- Because this documentation originates from the open source project there might be some references to platforms that are not supported for the IBM SDK. For example, references to macOS® are not relevant because there is no IBM SDK, Java Technology Edition for the macOS platform that includes the OpenJ9 VM.
- Until the Eclipse Foundation have written a full set of user documentation for the OpenJ9 VM, some original IBM content is still provided in the J9 VM reference for completeness.
- The OpenJ9 documentation that is available on the Eclipse Foundation website might not match the functionality that is available in the current level of the SDK, and therefore should not be read.
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:
-Xshareclasses:checkURLTimestamps
,-Xshareclasses:nocheckURLTimestamps
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:
- IBM SDK:
java com.ibm.jvm.TraceFormat
- OpenJ9:
traceformat
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.