JEP 163: Enable NUMA Mode by Default When Appropriate

OwnerJesper Wilhelmsson
Componenthotspot / gc
Discussionhotspot dash gc dash dev at openjdk dot java dot net
Created2012/08/15 20:00
Updated2020/04/29 04:21


To improve the out-of-the-box performance on NUMA hardware, enable the -XX:+UseNUMA flag by default when the JVM detects it is running on a NUMA style computer.


NUMA style systems are now common, but the JVM defaults have not been updated to reflect it. Applications generally get better performance with proper NUMA behavior, aided by the existing JVM capabilities, rather than relying on operating system defaults when running on a NUMA computer. Without proper NUMA behavior, applications may experience large run-to-run variation simply due to the memory layout given by operating system defaults.


The intent of this change is to enable the existing JVM capability turned on by the -XX:+UseNUMA option by using operating system APIs to detect the NUMA topology at JVM boot time and turn on this support without the user having to explicitly add -XX:+UseNUMA to the flags.

To lower the impact on small applications there will be a minimum heap size required to enable NUMA. A reasonable limit is expected to be 2GB. There will be a new develop flag to set this value.

Other than the work required to detect the NUMA topology and set the flags, no further work to modify or extend existing NUMA features is intended by this JEP.


This change can be tested by standard benchmarks and application server test suites, on both NUMA and single node systems to ensure there are no unintended side effects.

Risks and Assumptions

The JDK source base supports several operating systems, so that increases the amount of testing required if all the operating systems will adopt this behavior.