Performance tuning
You can improve the performance of applications by tuning the Eclipse OpenJ9 VM, enabling hardware features, or by using specific APIs in your application code.
OpenJ9 is configured to start with a set of default options that provide the optimal runtime
environment for Java™ applications with typical workloads.
However, if your application is atypical, you can improve performance by tuning the VM. Click the
links to learn more about the following options:
- Choosing a garbage collection policy
- OpenJ9 includes several garbage collection policies. To learn more about these policies and the types of application workload that can benefit from them, see Garbage collection policies in the OpenJ9 user documentation.
- Improving startup times with class data sharing
- You can share class data between running VMs, which can reduce the startup time for a VM after the cache has been created. For more information, see Introduction to class data sharing in the OpenJ9 user documentation.
- Choosing large pages
- If your application allocates a large amount of memory and frequently accesses that memory, you might want to enable large page support on your system. For more information, see Configuring your system in the OpenJ9 user documentation.
- Optimizing for cloud environments
- If you are running on Linux® with the generational concurrent garbage collection policy, you can use the -XX:IdleTuningMinIdleWaitTime option to tune when free memory pages are released. This setting can reduce memory use and therefore can help to reduce the cost of running applications in a cloud environment. For more information, see -XX:IdleTuningMinIdleWaitTime in the OpenJ9 user documentation.
You can also improve performance by enabling hardware features or by using specific APIs in your
application code. Click the links to learn more about the following options:
- Native data
- If your Java application manipulates native data, consider writing your application to take advantage of methods in the Data Access Accelerator API.
- Exploiting Remote Direct Memory Access (RDMA)
- High performance network infrastructure that supports Remote Direct Memory Access (RDMA) is
designed to speed up communications between applications.
- On Linux systems, existing Java socket applications can take advantage of RDMA-capable network adapters by using extensions to the Socket and ServerSocket APIs. For more information, see Java Sockets over Remote Direct Memory Access (JSOR) (Linux only). Alternatively, you can write applications that use APIs in the jVerbs library to communicate directly over RDMA-capable infrastructure. See The jVerbs library (Linux only).
- On z/OS® systems, OpenJ9 supports the use of the SMC-R protocol solution to enable TCP socket applications to transparently use RDMA. This feature enables direct, high-speed, low-latency, memory-to-memory (peer-to-peer) communications. For more information, see Shared Memory Communications via Remote Direct Memory Access (z/OS only).
- Exploiting Graphics Processing Units (GPU)
- On Linux and Windows systems, you can improve the performance of your Java applications by offloading certain processing functions from your processor (CPU) to a graphics processing unit. For more information, see Exploiting Graphics processing units.
Debugging performance problems
If you are having problems with performance, see: