Back to Zing Documentation Home

Using ZVM Command-Line Options

This reference guide describes Java command-line options that are available in the ZVM.

Zing Virtual Machine Options

Java command-line options that control the interaction between ZVM and ZST begin with the -XX: prefix. These options summarized in the following table. ZVM command-line options are case sensitive.

  ZVM Command-Line Options
Command Line Option Description Default
-Xmx<size>[m|M|g|G] Specifies the size of the Java heap.

The examples below both specify a 10 GB heap:

-Xmx10240m

-Xmx10g

The minimum heap size on Zing is 512 MB.

Prior to ZVM 19.09.0.0, the default Xmx was 1 GB with or without a cgroup limit. Starting with ZVM 19.09.0.0, the default value of Xmx is MaxRAMPercentage (default 25%) of cgroup memory limit if such a limit exists.

 

-XX:JavaMemMax=<size>

Specifies the maximum amount of memory that can be allocated to the ZVM process (the Java heap). Units can be specified in kilobytes (K or k), megabytes (M or m), or gigabytes (G or g). For example:

-XX:JavaMemMax=2g

-XX:JavaMemMax=128M

-XX:JavaMemMax=128m

If this option is not specified the maximum size to which java heap can grow is calculated internally by the JVM based on the size of the java system memory. Contact Azul customer support for more information about this option.

You might need this option when multiple JVMs are run on the same host and frequent usage of contingency or pause prevention memory has been observed.

Value of -Xmx plus available Contingency Memory

‑XX:‑AutoTuneResourceDefaultsBasedOnXmx

Allows ZVM to start with Xmx128M or Xmx256M by reducing default values for some parameters such as ReservedCodeCacheSize and GC thread count. The flag is automatically set to true for java ‑version, ‑help, etc.

false

-XX:[+/-]UseZST

Allows ZVM to start with or without the Zing System Tools (ZST) component.

false
‑XX:NonZSTModePreferenceLevel

Sets the preference selection for launching Zing with Zing System Tools (ZST). The selection choices are as follows:

0 - Never select the non-ZST mode. Zing will error out if ZST is not installed, configured, or enabled.

1 - Select the non-ZST mode only if ZST is not installed properly.

Note: If ZST is installed but misconfigured in this mode, Zing will error out.

2 - Select the non-ZST mode if ZST is not installed, configured, or enabled.

Note: When enabled, -XX:+UseZST overrides the ‑X:NonZSTModePreferenceLevel command-line option with its value.

1

‑XX:GenPauselessNewThreads

Specifies the number of garbage collection worker threads for the new generation. Setting default value is based off of Xmx:

  1. If Xmx is more than 2 GB, the default value is 45% of the number of logical cores available to the process.
  2. If Xmx is less than or equal to 2 GB, the default value is either Xmx divided by 128 MB or 45% of the number of logical cores available to the process, whichever is smaller.
  3. If -XX:+UseSTW is specified, the default value is the number of logical cores. available to the process.

The minimum value supported is 1.

8
‑XX:GenPauselessOldThreads

Specifies the number of garbage collection worker threads for the old generation. Setting default value is based off of Xmx

  1. If Xmx is more than 2 GB, the default value is 30% of the number of logical cores available to the process.
  2. If Xmx is less than or equal to 2 GB, the default value is either 66% (two thirds) of the value of GenPauselessNewThreads, or 30% of the number of logical cores available to the process, whichever is smaller.
  3. When -XX:+UseSTW is specified, the default value is the same as the number of logical cores available to the process.

The minimum value supported is 1.

5
‑XX:GPGCThreads

Specifies the total number of garbage collection worker threads This is an alternative way to specify GenPauselessNewThreads and GenPauselessOldThreads

When used, GenPauselessOldThreads is derived as 40% of GPGCThreads. GenPauselessNewThreads is then derived as GPGCThreadsGenPauselessOldThreads. The default value is the sum of the default values of GenPauselessNewThreads and GenPauselessOldThreads.

The minimum value supported is 2.

13

Intrinsic Options

Intrinsics are hand-tuned machine code integrated into the JVM for some numeric algorithms like BigInteger, AES encryption, CRC checksum calculations, and SSE/AVM opcodes. Most are turned on by default. To see a list of all adjustable intrinsic options of the current ZVM and their default values, run the following command:

$ /opt/zing/zing-jdk1.8.0-<version>/bin/java -XX:+PrintFlagsFinal -version 2>&1 | grep Intrinsic

  ZVM Command-Line Options
Command Line Option Description
-XX:-UseMultiplyToLenIntrinsic

Disables intrinsic for BigInteger::multiplyToLen()

-XX:-UseSquareToLenIntrinsic

Disables intrinsic for BigInteger::squareToLen()

-XX:-UseMulAddIntrinsic Disables intrinsic for BigInteger::mulAdd()
-XX:+UseMontgomeryMultiplyIntrinsic

Implements BigInteger.montgomeryMultiply intrinsic.

-XX:+UseMontgomerySquareIntrinsic

Implements BigInteger.squareMultiply intrinsic.

Native Memory Tracking Options (available since ZVM 16.01.0.0)

These options are useful to analyze usage of memory outside the Java heap and ZST memory for NIO, thread stacks.

  ZVM Command-Line Options
Command Line Option Description
-XX:+PrintNMTStatistics Enables output of the Native Memory Tracking statistics
-XX:NativeMemoryTracking=<tracking level>

Specifies the level of tracking output. In ZVM 16.01.0.0 and later releases, only "summary" level is supported.

Code Cache Use Optimization Options

  ZVM Command-Line Options
Command Line Option Description Default

-XX:-UseEmergencyCodeCacheFlushing

Disables emergency codecache flushing. Emergency flushing starts removing unused blobs only when more than 85% of codecache space is consumed. Before that it "sleeps" and does nothing. This option is enabled by default.

true
-XX:+UseCodeCacheFlushing

Enables regular codecache flushing. Unlike emergency flushing, regular flushing triggers unused blobs removal during the whole lifetime of the Zing Virtual Machine, i.e., it never waits for reaching 85% of codecache utilization. This option can be helpful when the codecache memory is being exhausted despite UseEmergencyCodeCacheFlushing was enabled. This option is disabled by default.

false

-XX:-EnableC1Flushing

Turns off flushing of unused code blobs generated by the Tier 1 compiler. This option takes effect only if either the UseCodeCacheFlushing or UseEmergencyCodeCacheFlushing option is set to true.

true
‑XX:CodeCacheMinimumFreeSpace Reserves the specified amount of space for code other than code compiled methods. 1302528
‑XX:CodeCacheOopTableSize

Sets the size of the table used internally by the VM to store information about object references that reside in the codecache.

Prior to ZVM19.09.0.0, CodeCacheOopTableSize was 64 MB for Xmx >=1 GB. Starting with ZVM 19.09.0.0, the default value is 1/4th of ReservedCodeCacheSize rounded up to the next multiple of 2 MB.

16777216
‑XX:ReservedCodeCacheSize

Specifies the maximum size of the codecache.

Prior to ZVM 19.09.0.0, ReservedCodeCacheSize was 256 MB for Xmx >=1GB. Starting with ZVM 19.09.0.0, the default value is 6% of Xmx rounded up to the next multiple of 2 MB and capped at 256 MB.

65011712

Thread Local Allocation Buffer (TLAB) Use Optimization Options

  ZVM Command-Line Options
Command Line Option Description Default

-XX:MinTLABSize

Minimum allowed size of the thread local allocation buffer (in bytes).

32768
-XX:[+/-]GPGCUseFullPageTLABs

When true, uses a single 2 MB page as a fixed size TLAB.

false

-XX:TLABRefillWasteFraction

Specifies maximum TLAB waste at a refill (internal fragmentation).

64
‑XX:TLABSize Sets the size of the thread local allocation buffer. 2031616
‑XX:TLABResizeStepPercent   25
‑XX:TLABWasteTargetPercent

Determines the percentage of the threshold of the TLAB when the object size is larger than a threshold, the TLAB is retired, and the object is allocated inside a new TLAB.

25

ZVM in the Non-ZST Mode Options (available since ZVM 19.06.0.0)

  ZVM Command-Line Options
Command Line Option Description Default

‑XX:[+/-]UseLargePages

Enables Zing VM to use large (2M pages) if the system is properly configured. See Tuning Zing Virtual Machine for system configuration steps. The default value for ZVM with ZST mode is true, for ZVM mode - false.

true for ZVM with ZST

false for ZVM

‑XX:[+/-]UseTransparentHugePages

Enables Zing VM to use Transparent Huge Pages (THP) in shared memory madvise mode if the system is properly configured. See Tuning Zing Virtual Machine for system configuration steps. To disable, use ‑XX:-UseTransparentHugePages. Transparent Huge Pages (THP) in shared memory madvise mode is available in Linux kernel version 4.12.10 and above.

true

‑XX:GPGCNoZSTBackingStoragePath

Points to the mount point for managing large pages when configuring static Large pages. Used in conjunction with -XX:UseLargePages on Linux kernel versions prior to 4.14. See Tuning Zing Virtual Machine for system configuration steps.

 

‑XX:[+/-]GPGCNoZSTUseNUMAInterleaving

Enables non-uniform memory access (NUMA) interleaving when libnuma library is present.

true

‑XX:[+/-]GPGCNoZSTWorkaroundRSSInaccuracy

Report more accurate resident set size (RSS) value for off heap memory in the GC log file. In the non-ZST mode, Zing uses the shared memory multimapping facility provided by Linux. However, the RSS reported by Linux is known to be inaccurate when the process does multimapping. When the flag is turned on Zing tries to compute a more accurate value for RSS which is then reported in the GC log.

true
‑XX:[+/-]AlwaysPreTouch

Acquires all of Xmx upfront before starting the application. If the option is not specified, a JVM internal thread acquires the memory in the background after an application is started.

false

Advanced Miscellaneous Options

  ZVM Command-Line Options
Command Line Option Description Default
-XX:[+/-]PrintGCHSLines

Enables writing system information headers (GCHS) in the garbage collection log file.

true
-XX:+PrintGCExtraDetails

Enables a new Garbage Collector logging level used wherever the data collection or reporting has a noticeable overhead. This flag also enables PrintGCDetails which is the next lower logging level.

-XX:+PromoteCheckpoints

Lets tardy threads complete the checkpoint process by pausing active threads. See Troubleshooting Guide for suggestions on when to use this option.

false

-XX:CheckpointPromotionDelay=<time in ms>

Defines the threshold for triggering the promotion timeout. This flag has an effect when -XX:+PromoteCheckpoints is specified.

850

uintx ProfileStartupLimitInSeconds

Sets time limit for ReadyNow! to wait for compilations to finish at startup as specified in seconds.

60
-XX:GPGCActiveObjectPaddingSize=<n>

Number of cache lines of padding to insert after mutator relocated objects during relocation.

0

(no padding)

-XX:+GPGCRetainActiveObjectPadding

When true, retain any previously allocated active object padding during GC relocation. When false, any previously allocated active object padding is removed during GC relocation and will not be re-added until the object is mutator relocated again.

false

-XX:ActiveProcessorCount=<number of CPUs>

Allows for specifying explicitly the number of CPUs available for the Zing JVM. Works only with the container support (i.e., if -XX:-UseContainerSupport is not specified) and overrides the automatic CPU detection logic in the JVM.

-1

-XX:-UseContainerSupport

Turns off using container-specific information about available CPUs instead of using the information about the whole system. Enabled by default.

true

-XX:+DashVersionSilenceLicenseErrors

Starting with 18.07.0.0, the Zing JVM diagnoses licensing problems if run with -version option: it prints a warning and exits with an error code. If this option is specified together with -version, the JVM ignores licensing problems (specifically the warning is not printed) and exits with 0. Setting the ZING_DASH_VERSION_SILENCE_LICENSE_ERRORS envirnoment variable has the same effect.

false

-XX:+PreserveFramePointer

(Available since ZVM 17.03.0.0; requires ZST 5.18.0 or later) The flag is needed for producing flame graphs with the Linux perf utility and for similar performance analysis tools which rely on stackwalking to record Java method invocations, the time percentage spent in them, and their use of Linux system function calls.

false

-XX:-UseLLVMBasedDisassembler

Turns the LLVM-based disassembler off. Starting with Zing 18.07.0.0, the default disassembler is changed from Zing internal to LLVM-based.

 
-XX:PrintAssemblyOptions=intel <diagnostic>

Changes disassembly syntax from AT&T to intel. This flag is diagnostic and must be preceded by -XX:+UnlockDiagnosticVMOptions.

 
-XX:GPGCNewGenConcurrentMarkFlushRetryLimit= <upper limit of retries>

Limits the number of mutator NMT reference buffer flushes performed during concurrent marking. The default value of the retry limit is 3.

To return to the old behavior of looping in concurrent marking until no more mutator references are flushed, change the default value to -1.

3
-XX:GPGCNewGenConcurrentMarkFlushRetryLimitAction=<upper limit of iterations>

Controls the behavior of the new garbage collector when the number of iterations of the concurrent marking mutator NMT flush loop exceeds the specified retry limit.

The default action is to perform reference strengthening followed by iterating the limit of retries more times before exiting out of the loop and heading toward the safepoint.

2
-XX:[+/-]UseModifiedThreadLocal

Internally polls on a ReferenceQueue to determine if a key object has been garbage collected rather than polling by checking for NULL through the Reference.get() API, that can unintentionally prevent the weakly reachable key from being garbage collected. The flag is more friendly to garbage collectors that perform marking concurrently.

true
-XX:[+/-]UseSpecialArrayCopy

Indicates which version of arraycopy of objects intrinsic works with. When set to true, it stands for a new vectorized intrinsic version. When set to false, it stands for the old scalar version.

true
-Xnativevmflags:[ignore|error|warn]

If -Xnativevmflags:error is specified and the ZVM detects an option that it does not support, it does not launch and generates the following type of message:

HotSpot™ 64-Bit Tiered VM error: Unsupported native VM option ‘+UseParNewGC’

If -Xnativevmflags:warn is specified as a last option in the command line, it enables a warning message for each OpenJDK JVM option ignored by Zing. It prints a warning message while your application starts normally, for example:

$ /opt/zing/zing-jdk8/bin/java -XX:+UseParallelGC -Xnativevmflags:warn -version
Zing 64-Bit Tiered VM warning: Ignoring unsupported native VM option '+UseParallelGC'
java version "1.8.0-zing_18.12.0.0"
Zing Runtime Environment for Java Applications (build 1.8.0-zing_18.12.0.0-b4)
Zing 64-Bit Tiered VM (build 1.8.0-zing_18.12.0.0-b9-product-azlinuxM-X86_64, mixed mode)
ignore
-XX:[+/-]ResetSignalMaskAtLaunch

Clears the signal mask to enable SIGQUITs when set to true.

true
-XX:GPGCPausePreventionMemory

Allocates the limit from the pause fund to restrict pause prevention memory.

 
-XX:ProfilePreMainTier2ExtraCompilerThreads

Enables the use of extra threads for compilations for C2 and Falcon during the pre-main phase when ReadyNow triggers and executes different activities.

This option is complementary to CIMaxCompilerThreads. See Zing User's Guide for details.

In pre-main phase when your code is not yet being executed and GC is silent, the total amount of C2/Falcon compiler threads is equal to the sum of CIMaxCompilerThreads and ProfilePreMainTier2ExtraCompilerThreads. Note that the sum is capped to match the number of CPUs available for Zing on a machine.

When the pre-main phase is done (i.e., ProfileStartupLimitInSeconds is exhausted) and your main is started, the total amount of compiler thread goes back to standard CIMaxCompilerThreads.

2
-XX:ProfileWorkerThreads

When this option value is greater than 0, it allows ReadyNow! to use multiple concurrent background threads to asynchronously trigger and execute different ReadyNow!-related activities such as early class loading, class initializations, or trigger compilations.When the flag value is set to 0, old synchronous event's triggering and/or processing is used.

The default value is equal to the minimum number of CPUs available for Zing on a machine.

4
-XX:[+/-]RunVMErrorOnUnhandledSignals

Does error reporting for SIGABRT, SIGFPE, and SIGTRAP signals if there are no user defined handlers installed.

true
-XX:[+/-]SafelyTrustEffectivelyFinalFields

Enables effectively final optimizations for private fields which are initialized inside a constructor or class initializer, but are otherwise read only. The effectively final family of optimizations allows the VM to perform compiler optimization as if the fields were constants, but deoptimize if a later write is detected at runtime.

true
-XX:[+/-]UseOpenJSSE

Enables the OpenJSSE provider that supports TLS 1.3, see https://github.com/openjsse/openjsse for details.

false
-XX:MaxRAMPercentage=<percentage of the memory limit>

Adjusts the maximum heap size (if not explicitly specified) based on the configured cgroup memory limit. If Xmx is not specified, the VM heap size limit is calculated as (MaxRAMPercentage / 100) * cgroups_limit.

25
-XX:[+/-]AlignArrayStart

Enables 64-bit alignment of the starting point of any array in the heap memory.

true
-XX:HserrRawCodeWindowSize=<size in bytes>

Specifies the size of raw x86 instructions to dump into hs_err file.

512

Garbage Collection Options to Control ZVision Output

These ZVM command-line options control the output of garbage collection information when using ZVision.

  Garbage Collection Java Command Line Options
Command Line Option Description

-Xloggc:[filename]

Enables verbose GC logging and directs it to a file. It is recommended to add a timestamp and a PID to get a unique log name:

-Xloggc:gc_%t_%p.log

-XX:+PrintGCDetails

Enables the detailed logging output.

-XX:PrintSYSINFOAtIntervalSec=<time interval>

Writes the SYSINFO line (CPU load, memory usage, paging info) at fixed intervals in seconds.

As of ZVM release 5.10.0, the default value the ZVM flag DisableExplicitGC is off. Prior to release 5.10.0, calls to System.gc() were ignored and no garbage collection was initiated unless -XX:-DisableExplicitGC was set. From 5.10.0 this is no longer the case and System.gc() calls may initiate a full GC cycle depending on the value of the GPGCOptimisticExplicitGC flag. If a System.gc() call initiates a garbage collection, the calling thread may or may not be blocked for the duration of the GC depending on the value of the SynchronousExplicitGC flag. The previous behavior is achieved by turning on the DisableExplicitGC flag, using -XX:+DisableExplicitGC.

  • -XX:{+/-}GPGCOptimisticExplicitGC

When enabled, a thread calling System.gc() initiates a new garbage collection if and only if one is not already in progress or one is pending. This flag is enabled by default.

  • -XX::{+/-}SynchronousExplicitGC

When enabled, a thread that initiates a garbage collection by calling System.gc() is blocked for the entire garbage collection cycle and resumes when the GC completes. Otherwise a concurrent garbage collection is initiated and the calling thread continues to execute. This flag is enabled by default.

Reserved Memory Command

When a Java application starts, heap memory is Reserved according to the value specified using the -Xmx command-line option. If not specified, the value is 1 GB.

There is no specific ulimit pertaining to -Xmx for ZVM. Such memory is configured for use during the system’s configuration using ZST. Configuration of the system using ZST requires root level permissions (superuser).

If -Xmx is less than 1 GB, Zing automatically increases it to 1 GB and writes a warning to stderr.

If you are running on a SUSE Linux Enterprise Server (SLES) system, prior to launching a ZVM for the first time, set the amount of virtual memory available to the shell using ulimit. At the command line, type:

ulimit -v unlimited

Collecting JVM Behavior Data by Using jstat

To collect information about the ZVM’s garbage collectors' behavior, use Zing’s monitoring tool (jstat) with the -gpgc command-line option . Use the jstat distributed with Zing, not the jstat distributed with Oracle's JVM.

Usage Syntax

jstat -gpgc [-t == show timestamps] pid [msec between samples [# samples]]

 

Samples

Sample -gpgc, -t, samples, #samples options

jstat -gpgc -t 6549 10 5

Timestamp  NGU   OGU   PGU   JHMX   NGC   NGCT    OGC   OGCT    GCT  

172.0  419840.0 2048.0 6144.0 1036288.0 276  170.689 123 94.579  265.268

172.1  419840.0 2048.0 6144.0 1036288.0 276  170.689 123 94.579  265.268

172.1  419840.0 2048.0 6144.0 1036288.0 276  170.689 123 94.579  265.268

172.1  419840.0 2048.0 6144.0 1036288.0 276  170.689 123 94.579  265.268

172.1  419840.0 2048.0 6144.0 1036288.0 276  170.689 123 94.579  265.268

Sample -gpgc option

jstat -gpgc 44265

  NGU        OGU      PGU       JHMX       NGC    NGCT    OGC    OGCT     GCT

36864.0    73728.0   36864.0  1036288.0   742  186.860   221  147.621  334.481

Sample -class option

jstat -class 44265

Loaded  Bytes  Unloaded  Bytes     Time 

  3063  7777.3       1     0.0     1.14

Sample -gc option

jstat -gc 44265

  NGU        OGU      PGU       JHMX       NGC    NGCT    OGC    OGCT     GCT

36864.0    73728.0   36864.0   1036288.0   742  186.860   221  147.621  334.481

Sample -gccause option

jstat -gccause 44265

JavaHeapPercentUsed  NGU  OGU  PGU  JHMX  NGC  NGCT  OGC  OGCT  LGCC   GCC

14.23  36864.0  73728.0  36864.0  1036288.0  742  186.860  221  147.621 No GC No GC 

Sample -gcnew option

jstat -gcnew 44265

   NGU         JHMX       NGC    OGC    NGCT

36864.0     1036288.0    742    221   186.860

Sample -gcold option

jstat -gcold 44265

PGU      OGU         JHMX       NGC    OGC    OGCT     GCT 

36864.0  73728.0     1036288.0      742   221  147.621  334.481

Sample -gcutil option

jstat -gcutil 44265

JavaHeapPercentUsed     JHMX       NGC     NGCT    OGC    OGCT     GCT 

       14.23          1036288.0   742     186.860  221   147.621  334.481

Sample -stats option

jstat -stats 44265 

Loaded   classInitTime classLinkedTime classVerifyTime    sun.cls.time applicationTime safepointSyncTime  safepointTime  vmOperationTime  NGC   NGCT OGC     OGCT 

  3063      0.759357     0.121911     0.250850     1.140906     1996.780026  0.450701        1.511731        1.663066    742 186.860000   221  147.621000

Sample -profile option

jstat -profile 44265 

Loaders   IDedLoaders Class SpecLoad    SpecInit Loaded Inited  Developed  Method  T1E  T1C  T2E   T2C   Profiled   ProfUsed   Warn   Error

21         2        3065      2947      1697      2927    2274      1445     1407   230    220     221    831    797 261 0

Sample -profileerrors option

jstat -profile 44265 

Warn  ColClass SpecLoadFail  UnmatchLoad RepLoad  OverDeveloped  Error ColLoader UnresLoaders UnresClass  SpecInitFail  UnresMthod  ColMathod

18     1         0            15         0            2            0           0      0        0       0        0       0

Sample -deopt option

jstat -deopt 44265 

CHA  UnreachedIf UnreachedCall  Unloaded Uninit  Unexpected  Null StuckInLoop NotEntrant Cast  Range  Throw  Div0   UncountedLoops   Jvmti  Other

13     6           13           0         0            2       1           0      0        3       0        0       0       0       0       0

See also Using ReadyNow!.

Output Header Descriptions

Header Description

applicationTime

Time called

Bytes 

Bytes consumed

classInitTime

Time called

classLinkedTime

Time called

classVerifyTime   

Time called

GCC

GC cause

GCT

Both generation collectors total GC time

JavaHeapPercentUsed

Percent of memory used by Java heap

JHMX

Java heap Xmx value

Loaded 

Processes loaded

LGCC

Last GC cause

NGC

New generation GC count

NGCT

New generation GC time (concurrent time the collector is running)

OGC

Old generation GC count (at that instant)

OGCT

Old generation GC time (concurrent time the collector is running)

NGU

New generation use (at that instant)

OGU

Old generation use (at that instant)

PGU

Permanent generation use

safepointSyncTime 

Time called

safepointTime 

Time called

sun.cls.time

Time called

Time

Elapsed time

Unloaded   

Processes unloaded

vmOperationTime

Time called

ZVM Mini-Core File Option

There is an option, -XX:+DumpMiniCore, that creates significantly smaller Zing core files. This option is specified through the Java application launch command and applied to the runtime Java application. It is not applied to the ZVM host machine. When you use this option:

  • Generated Zing core files do not include application objects stored in the Java heap.
  • Time required to produce a Zing core file or core file bundle is reduced.

ZVM Mini-Core File Requirements

The mini-core file option requires ZST 5.7.5 or later and ZVM 5.10.x or later.

If the option is specified and either the ZST version or ZVM version is not compatible, a message is issued.

  • If the ZST version supports the -XX:+DumpMiniCore option, but the ZVM version does not, an Unrecognized VM option warning is printed to STDERR. For example:

    <my dir>/jdk6/x86_64/product/bin/java -XX:+DumpMiniCore -version

    Zing 64-Bit Tiered VM error: Unrecognized VM option '+DumpMiniCore'

    Could not create the Java virtual machine.

  • If the ZVM version supports the -XX:+DumpMiniCore option, but the ZST version does not, a warning message is issued. For example:

    /bin/java -jar -XX:+DumpMiniCore -version

    Zing VM Warning: -XX:+DumpMiniCore is not supported by this ZST (found API version 0x5e, requires API version >= 0x5f)

    java version "1.7.0-internal-zing_99.99.99.99.dev"

    Zing Runtime Environment for Java Applications (build 1.7.0-internal-zing_99.99.99.99.dev-b25)

    Zing 64-Bit Tiered VM (build 1.7.0-zing_99.99.99.99.dev-b501-product-azlinuxM-X86_64, mixed mode)

Setting the ZVM Mini-Core File Option

Include the option -XX:+DumpMiniCore with your Java launch command.

Some failures cannot be effectively diagnosed with a mini-core file. In this case, Azul support may request that you try to reproduce the failure and produce a full-sized core file, by removing -XX:+DumpMiniCore from your Java launch command.

  • When -XX:+DumpMiniCore option is not specified, a full core file, including the application objects stored in the Java heap, is created if Zing crashes.
  • When -XX:+DumpMiniCore option is specified, a core file, that does not include the application objects stored in the Java heap, is created if Zing crashes.

Speculative Locking Options

Speculative Locking in the Zing VM leverages the Intel® Transactional Synchronization Extensions (Intel® TSX) instruction set, to take advantage of the situation where there is lock contention between threads, but no data contention inside the locked region. If a multithreaded program can concurrently modify shared data, a synchronized block or method is usually necessary to ensure correctness. This causes lock contention. The synchronization is not necessary if the concurrent accesses are to different parts of the shared data. In other words, a lock is not necessary when there is no data contention inside the locked region. For example, two different threads can modify a hash table concurrently without taking a lock, if they change values in different buckets of the hash table. Speculative Locking elides locks by speculating that there is no data contention. It does so by starting a transaction using Intel TSX instructions. If the speculation turns out to be wrong, the Intel TSX enabled CPU will detect it, abort the transaction and roll back execution to the start of lock. If a transaction gets aborted, the VM, using certain heuristics, either retries speculation or just acquires the lock as usual. The heuristic maintains aborted or attempted transactions for every speculated lock and disables speculation on that lock if it detects a high aborted or attempted value.

The following table summarizes the command-line options that control the use of speculative locking in Zing VM. The command lines options are case sensitive.

  Command-Line Options
Command Line Option Description Default

-XX:[+/-]UseRTMLocking

Enables speculative locking.

false

-XX:[+/-]RTMHeuristic

Enables (Restricted Transactional Memory) RTM heuristics.

true

-XX:RTMAbortRatio=<threshold value>

Threshold value for RTM heuristics. If aborted or attempted transactions ratio goes beyond this limit for a monitor then speculation is disabled for that monitor.

50

-XX:RTMRetryCount=<attempts>

Number of times speculation is attempted on a monitor, per lock acquisition. Fewer, or no attempts will be made if internal heuristic disables speculation on the monitor.

5

Note that RTMHeuristic, RTMAbortRatio, and RTMRetryCount options are meaningful if the UseRTMLocking option is true.

Falcon Compiler Options

The Falcon compiler is an optimizing JIT (Just-In-Time) compiler that is the default Zing compiler starting from the Zing release 17.03.0.0. Below are the Falcon-specifc command-line options:

Option Description
-XX:+UseFalcon

Specifies which Tier 2 compiler should be used. The default Tier 2 compiler is Falcon. To use the C2 JIT instead of the Falcon JIT, run the following command:

For example, $JAVA_HOME/bin/java -XX:-UseFalcon –cp . myprog

-Xcompilerflags:ignore|warn|error

This option controls the handling of a C2 or Falcon specific flag used when the other compiler is active. The default value is "warn".

-XX:+UseFalconOSR

This option controls the On Stack Replacement (OSR) functionality. OSR is enabled by default. It is not recommended to disable this option. If needed, disable it for only diagnostics purposes.

-XX:Tier2OSRThreshold=<threshold value>

This option changes the threshold at which the OSR is triggered – that is loop compilation by C2 or Falcon compiler. The default value is 14000.

The value might be decreased to improve warm-up characteristics.

-XX:FalconCompileThreshold=<threshold value>

Threshold value for the Falcon JIT compiler. Replaces the similar option of the C2 compiler (-XX:C2CompileThreshold). The default value is 50000.

-XX:+UseC2 Disables Falcon and switches to the C2 compiler.
-XX:FalconUseAVX

Specifies the highest supported AVX instructions set on x86/x64 CPUs. The default value is 2.

-XX:[+/-]FalconUseLegacyInliner

Switches back to the old implementation of the LLVM inliner instead of using a highly customized integrated inliner to perform inlining optimizations in Falcon compiles.

The default value is false.

-XX:FalconOptimizationLevel=int

Controls the level of compiling optimization. The default value is 2.

Suggested use: the default value is expected to fit most cases. However, if the CPU load at warmup is too high or warmup takes too long, there is a reason to try 1. The downside is that peak performance might be lower with that setting.

Accepts values from 0 to 3:

0 - minimal optimizations, lowest CPU consumption by Falcon (not recommended for production)

1 - reasonable optimizations and CPU time/warmup (good for production)

2 - aggressive optimizations, might expose high CPU utilization in some cases (default)

3 - turns on very aggressive optimizations known to cause long compilations and high CPU load at warmup (not recommended for production)

-XX:[+/-]FalconPreserveBoxingIdentity

Disables aggressive optimization of boxing types (integer, double, etc.). Should only be used for applications which are found to rely on implementation defined behavior as opposed to the specified behavior of boxing routines.

The default value is false.

-XX:[+/-]FalconGenerateProfilerInfo

Disables support for performance profiling of compiled code. It may help to reduce compiled code size by a few percent.

The default value is true.

Note

The Falcon compiler is available only for Java 7, Java 8, and Java 11. An attempt to use the -XX:+UseFalcon option for Java 6 will cause a failure.

ReadyNow! Options

Below are the ReadyNow!-specifc command-line options:

Option Description Default
uintx ProfileLogMaxSize

Specifies the maximum size that a ReadyNow! profile log is allowed to reach. Profiles will be truncated at this size, regardless of whether the application has actually been completely warmed up. It is recommended to either not set this size explicitly, or set it generously if required.

0

uintx ProfileLogTimeLimitSeconds

Instructs ReadyNow! to stop adding to the profile log after a period of N seconds regardless of where the application has been completely warmed up. It is recommended to either not set this size explicitly, or set it generously if required.

0

Tick Profiler Options

The Tick Profiler provides information to allow calculation of how processor resources are used for an interval of recorded time. Below is the Tick Profiler-specifc command-line option:

Option Description Default
-XX:[+/-]UseTickProfiler

Enables and disables profiling of processor core time spent between various software execution units (for example, threads, methods, and run-time tasks).

Due to known issues with version 3.10 and earlier Linux kernels, including those used in RHEL 7.x and CentOS 7.x, using +UseTickProfiler in production should be done with caution, as potential hangs may result under heavy loads.

false

Out-of-Memory Options

Out-of-Memory command-line options let the JVM handle out-of-memory occurrences:

Option Description Default
-XX:[+/-]ExitOnOutOfMemoryError

Enables the JVM exit on the first occurrence of an out-of-memory error. Useful if you prefer restarting an instance of the JVM to handling out of memory errors.

false
-XX:[+/-]CrashOnOutOfMemoryError Enables the JVM crash and produce text and binary crash files when an out-of-memory error occurs. false

Flight Recorder Options

Flight Recorder command-line options gather and register events that help to understand the behavior of a Java Application and Zing Virtual Machine:

Option Description Default
-XX:[+/-]FlightRecorder

Enables Java Flight Recorder (JFR) in Zing JVM. With this option enabled, JFR recordings can be started and managed using jcmd commands or from the Zulu Mission Control tool.

false
‑XX:FlightRecorderOptions

Starts a flight recording from the command line with recording parameters provided as a value for this option.

For example, -XX:StartFlightRecording=filename=myrecording.jfr starts a recording in the file system while -XX:StartFlightRecording=disk=false,filename=myrecording.jfr starts an in-memory recording. In both cases the result is written to the myrecording.jfr file at the end of the JVM session. For the description of additional Java Flight Recording (JFR) parameters refer to JFR resources available in the Internet.

null
‑XX:StartFlightRecording

Specifes additional parameters to configure Java Flight Recorder (JFR). For the description of additional JFR parameters refer to JFR resources available in the Internet.

null
‑XX:JFRDescribeLiveSetPercentage

Specifies the percentage amount of a live set to be described by recorded JFR events. To omit some minor events from the recording, change the value of this option to a smaller number, e.g., 90.

99

Zing MXBean Options

Zing MXBean command-line options help monitor the Zing Virtual Machine heap utilization:

Option Description Default
-XX:+ReportUsedAsCommitted

The MemoryMXBean.getHeapMemoryUsage() method of MXBeans API returns the value of the Committed memory equal to the amount of JVM heap memory guaranteed as available for running an application (see Understanding Heap Memory Management for details). To switch to the old behavior of the MXBeans interface that returned the value of the Committed memory equal to Used memory, change the value of this option to true.

false

-XX:+MimicG1GCMemoryManagerNames

Changes garbage collector names returned by GarbageCollectorMXBean from GPGC to G1.

To define exact New and Old GC names use -XX:GPGCNewGCMemoryManagerName="GPGC New" and -XX:GPGCOldGCMemoryManagerName="GPGC Old" respectively. This option provides a workaround for applications that do not recognize GPGC names such as Logstash.

false
-XX:GPGCNewGCMemoryManagerName= <New collector name>

Sets the name returned by GarbageCollectorMXBean for the New generation collector.

GPGC New
-XX:GPGCOldGCMemoryManagerName= <Old collector name>

Sets the name returned by GarbageCollectorMXBean for the Old generation collector.

GPGC Old
-XX:[+/-]IncludeNonObjectHeapInReportedJavaHeap

Makes Java heap reporting APIs and Tools include "non-object" use.

false
-XX:[+/-]ReportConstantMaxPossibleHeapAsMaxJavaHeap

Lets APIs which report max heap capacity be aware of elasticity.

false

© Azul Systems, Inc. 2019 All rights reserved.

Privacy Policy | Legal | Terms of Use