IBM J9 VM 8
This page describes the Optimization Pack for Eclipse OpenJ9 (formerly known as IBM J9) Virtual Machine version 8.
Metrics
All metrics
Name | Unit | Description |
---|---|---|
jvm_heap_size | bytes | The size of the JVM heap memory |
jvm_heap_used | bytes | The amount of heap memory used |
jvm_heap_util | percent | The utilization % of heap memory |
jvm_memory_used | bytes | The total amount of memory used across all the JVM memory pools |
jvm_memory_used_details | bytes | The total amount of memory used broken down by pool (e.g., code-cache, compressed-class-space) |
jvm_memory_buffer_pool_used | bytes | The total amount of bytes used by buffers within the JVM buffer memory pool |
jvm_gc_time | percent | The % of wall clock time the JVM spent doing stop the world garbage collection activities |
jvm_gc_time_details | percent | The % of wall clock time the JVM spent doing stop the world garbage collection activities broken down by type of garbage collection algorithm (e.g., ParNew) |
jvm_gc_count | collections/s | The total number of stop the world JVM garbage collections that have occurred per second |
jvm_gc_count_details | collections/s | The total number of stop the world JVM garbage collections that have occurred per second, broken down by type of garbage collection algorithm (e.g., G1, CMS) |
jvm_gc_duration | seconds | The average duration of a stop the world JVM garbage collection |
jvm_gc_duration_details | seconds | The average duration of a stop the world JVM garbage collection broken down by type of garbage collection algorithm (e.g., G1, CMS) |
jvm_threads_current | threads | The total number of active threads within the JVM |
jvm_threads_deadlocked | threads | The total number of deadlocked threads within the JVM |
jvm_compilation_time | milliseconds | The total time spent by the JVM JIT compiler compiling bytecode |
Parameters
Heap
Name | Type | Unit | Default | Domain | Restart | Description |
---|---|---|---|---|---|---|
j9vm_minHeapSize | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | Minimum heap size (in megabytes) |
j9vm_maxHeapSize | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | Maximum heap size (in megabytes) |
j9vm_minFreeHeap | real | percent |
|
| yes | Specify the minimum % free heap required after global GC |
j9vm_maxFreeHeap | real | percent |
|
| yes | Specify the maximum % free heap required after global GC |
Garbage Collection
Name | Type | Unit | Default | Domain | Restart | Description |
---|---|---|---|---|---|---|
j9vm_gcPolicy | categorical |
|
|
| yes | GC policy to use |
j9vm_gcThreads | integer | threads | You should select your own default value. |
| yes | Number of threads the garbage collector uses for parallel operations |
j9vm_scvTenureAge | integer |
|
|
| yes | Set the initial tenuring threshold for generational concurrent GC policy |
j9vm_scvAdaptiveTenureAge | categorical |
| blank | blank, | yes | Enable the adaptive tenure age for generational concurrent GC policy |
j9vm_newSpaceFixed | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | The fixed size of the new area when using the gencon GC policy. Must not be set alongside min or max |
j9vm_minNewSpace | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | The initial size of the new area when using the gencon GC policy |
j9vm_maxNewSpace | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | The maximum size of the new area when using the gencon GC policy |
j9vm_oldSpaceFixed | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | The fixed size of the old area when using the gencon GC policy. Must not be set alongside min or max |
j9vm_minOldSpace | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | The initial size of the old area when using the gencon GC policy |
j9vm_maxOldSpace | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | The maximum size of the old area when using the gencon GC policy |
j9vm_concurrentScavenge | categorical |
|
|
| yes | Support pause-less garbage collection mode with gencon |
j9vm_gcPartialCompact | categorical |
|
|
| yes | Enable partial compaction |
j9vm_concurrentMeter | categorical |
|
|
| yes | Determine which area is monitored by the concurrent mark |
j9vm_concurrentBackground | integer |
|
|
| yes | The number of background threads assisting the mutator threads in concurrent mark |
j9vm_concurrentSlack | integer | megabytes |
| You should select your own domain. | yes | The target size of free heap space for concurrent collectors |
j9vm_concurrentLevel | integer | percent |
|
| yes | The ratio between the amount of heap allocated and the amount of heap marked |
j9vm_gcCompact | categorical |
| blank | blank, | yes | Enables full compaction on all garbage collections (system and global) |
j9vm_minGcTime | real | percent |
|
| yes | The minimum percentage of time to be spent in garbage collection, triggering the resize of the heap to meet the specified values |
j9vm_maxGcTime | real | percent |
|
| yes | The maximum percentage of time to be spent in garbage collection, triggering the resize of the heap to meet the specified values |
j9vm_loa | categorical |
|
|
| yes | Enable the allocation of the large area object during garbage collection |
j9vm_loa_initial | real |
|
|
| yes | The initial portion of the tenure area allocated to the large area object |
j9vm_loa_minimum | real |
|
|
| yes | The minimum portion of the tenure area allocated to the large area object |
j9vm_loa_maximum | real |
|
|
| yes | The maximum portion of the tenure area allocated to the large area object |
JIT
Name | Type | Unit | Default | Domain | Restart | Description |
---|---|---|---|---|---|---|
j9vm_jitOptlevel | ordinal |
|
|
| yes | Force the JIT compiler to compile all methods at a specific optimization level |
j9vm_compilationThreads | integer | integer | You should select your own default value. |
| yes | Number of JIT threads |
j9vm_codeCacheTotal | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | Maximum size limit in MB for the JIT code cache |
j9vm_jit_count | integer |
|
|
| yes | The number of times a method is called before it is compiled |
Other parameters
Name | Type | Unit | Default | Domain | Restart | Description |
---|---|---|---|---|---|---|
j9vm_lockReservation | categorical | categorical | blank, | no | Enables an optimization that presumes a monitor is owned by the thread that last acquired it | |
j9vm_compressedReferences | categorical |
| blank | blank, | yes | Enable/disable the use of compressed references |
j9vm_aggressiveOpts | categorical |
| blank | blank, | yes | Enable the use of aggressive performance optimization features, which are expected to become default in upcoming releases |
j9vm_virtualized | categorical |
| blank | blank, | yes | Optimize the VM for virtualized environment, reducing CPU usage when idle |
j9vm_shareclasses | categorical |
| blank | blank, | yes | Enable class sharing |
j9vm_quickstart | categorical |
| blank | blank, | yes | Run JIT with only a subset of optimizations, improving the performance of short-running applications |
j9vm_minimizeUserCpu | categorical |
| blank | blank, | yes | Minimizes user-mode CPU usage in thread synchronization where possible |
Domains
The following parameters require their ranges or default values to be updated according to the described rules:
Memory
Parameter | Default value | Domain |
---|---|---|
j9vm_minNewSpace | 25% of | must not exceed |
j9vm_maxNewSpace | 25% of j9vm_maxHeapSize | must not exceed |
j9vm_minOldSpace | 75% of j9vm_minHeapSize | must not exceed |
j9vm_maxOldSpace | same as j9vm_maxHeapSize | must not exceed |
j9vm_gcthreads | number of CPUs - 1, up to a maximum of 64 | capped to default, no benefit in exceeding that value |
j9vm_compressedReferences | enabled for j9vm_maxHeapSize<= 57 GB |
|
Notice that the value nocompressedreferences
for j9vm_compressedReferences
can only be specified for JVMs compiled with the proper --with-noncompressedrefs
flag. If this is not the case you cannot actively disable compressed references, meaning:
for Xmx <= 57GB is useless to tune this parameter since compressed references are active by default and it is not possible to explicitly disable it
for Xmx > 57GB, since the by default (blank value) compressed references are disabled, Akamas can try to enable it. This requires removing the
nocompressedreferences
from the domain
Constraints
The following tables show a list of constraints that may be required in the definition of the study, depending on the tuned parameters:
Memory
Formula | Notes |
---|---|
jvm.j9vm_minHeapSize < jvm.j9vm_maxHeapSize |
|
jvm.j9vm_minNewSpace < jvm.j9vm_maxNewSpace && jvm.j9vm_minNewSpace < jvm.j9vm_minHeapSize && jvm.j9vm_maxNewSpace < jvm.j9vm_maxHeapSize |
|
jvm.j9vm_minOldSpace < jvm.j9vm_maxOldSpace && jvm.j9vm_minOldSpace < jvm.j9vm_minHeapSize && jvm.j9vm_maxOldSpace < jvm.j9vm_maxHeapSize |
|
jvm.j9vm_loa_minimum <= jvm.j9vm_loa_initial && jvm.j9vm_loa_initial <= jvm.j9vm_loa_maximum |
|
jvm.j9vm_minFreeHeap + 0.05 < jvm.j9vm_maxFreeHeap |
|
jvm.j9vm_minGcTimeMin < jvm.j9vm_maxGcTime |
|
Notice that
j9vm_newSpaceFixed
is mutually exclusive withj9vm_minNewSpace
andj9vm_maxNewSpace
j9vm_oldSpaceFixed
is mutually exclusive withj9vm_minOldSpace
andj9vm_maxOldSpace
the sum of
j9vm_minNewSpace
andj9vm_minOldSpace
must be equal toj9vm_minHeapSize
, so it's useless to tune all of them together. Max values seem to be more complex.
Last updated