IBM J9 VM 6

This page describes the Optimization Pack for Eclipse OpenJ9 (formerly known as IBM J9) Virtual Machine version 6.

Metrics

All metrics

NameUnitDescription

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

NameTypeUnitDefaultDomainRestartDescription

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

0.3

0.10.5

yes

Specify the minimum % free heap required after global GC

j9vm_maxFreeHeap

real

percent

0.6

0.40.9

yes

Specify the maximum % free heap required after global GC

Garbage Collection

NameTypeUnitDefaultDomainRestartDescription

j9vm_gcPolicy

categorical

gencon

gencon, subpool, optavgpause, optthruput, nogc

yes

GC policy to use

j9vm_gcThreads

integer

threads

You should select your own default value.

164

yes

Number of threads the garbage collector uses for parallel operations

j9vm_scvTenureAge

integer

10

114

yes

Set the initial tenuring threshold for generational concurrent GC policy

j9vm_scvAdaptiveTenureAge

categorical

blank

blank, -Xgc:scvNoAdaptiveTenure

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

concurrentScavenge

concurrentScavenge, noConcurrentScavenge

yes

Support pause-less garbage collection mode with gencon

j9vm_gcPartialCompact

categorical

nopartialcompactgc

nopartialcompactgc, partialcompactgc

yes

Enable partial compaction

j9vm_concurrentMeter

categorical

soa

soa, loa, dynamic

yes

Determine which area is monitored by the concurrent mark

j9vm_concurrentBackground

integer

0

0128

yes

The number of background threads assisting the mutator threads in concurrent mark

j9vm_concurrentSlack

integer

megabytes

0

You should select your own domain.

yes

The target size of free heap space for concurrent collectors

j9vm_concurrentLevel

integer

percent

8

0100

yes

The ratio between the amount of heap allocated and the amount of heap marked

j9vm_gcCompact

categorical

blank

blank, -Xcompactgc, -Xnocompactgc

yes

Enables full compaction on all garbage collections (system and global)

j9vm_minGcTime

real

percent

0.05

0.01.0

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

0.13

0.01.0

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

loa

loa, noloa

yes

Enable the allocation of the large area object during garbage collection

j9vm_loa_initial

real

0.05

0.00.95

yes

The initial portion of the tenure area allocated to the large area object

j9vm_loa_minimum

real

0.01

0.00.95

yes

The minimum portion of the tenure area allocated to the large area object

j9vm_loa_maximum

real

0.5

0.00.95

yes

The maximum portion of the tenure area allocated to the large area object

JIT

NameTypeUnitDefaultDomainRestartDescription

j9vm_jitOptlevel

ordinal

noOpt

noOpt, cold, warm, hot, veryHot, scorching

yes

Force the JIT compiler to compile all methods at a specific optimization level

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

10000

01000000

yes

The number of times a method is called before it is compiled

Other parameters

NameTypeUnitDefaultDomainRestartDescription

j9vm_compressedReferences

categorical

blank

blank, -Xcompressedrefs, -Xnocompressedrefs

yes

Enable/disable the use of compressed references

j9vm_aggressiveOpts

categorical

blank

blank, -Xaggressive

yes

Enable the use of aggressive performance optimization features, which are expected to become default in upcoming releases

j9vm_virtualized

categorical

blank

blank, -Xtune:virtualized

yes

Optimize the VM for virtualized environment, reducing CPU usage when idle

j9vm_shareclasses

categorical

blank

blank, -Xshareclasses

yes

Enable class sharing

j9vm_quickstart

categorical

blank

blank, -Xquickstart

yes

Run JIT with only a subset of optimizations, improving the performance of short-running applications

j9vm_minimizeUserCpu

categorical

blank

blank, -Xthr:minimizeUserCPU

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

ParameterDefault valueDomain

j9vm_minNewSpace

25% of j9vm_minHeapSize

must not exceed j9vm_minHeapSize

j9vm_maxNewSpace

25% of j9vm_maxHeapSize

must not exceed j9vm_maxHeapSize

j9vm_minOldSpace

75% of j9vm_minHeapSize

must not exceed j9vm_minHeapSize

j9vm_maxOldSpace

same as j9vm_maxHeapSize

must not exceed j9vm_maxHeapSize

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

FormulaNotes

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 with j9vm_minNewSpace and j9vm_maxNewSpace

  • j9vm_oldSpaceFixed is mutually exclusive with j9vm_minOldSpace and j9vm_maxOldSpace

  • the sum of j9vm_minNewSpace and j9vm_minOldSpace must be equal to j9vm_minHeapSize, so it's useless to tune all of them together. Max values seem to be more complex.

Last updated