Back to Zing Documentation Home

Command-Line Options for the Zing Virtual Machine

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:



The minimum heap size on Zing is 1 GB.



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:




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


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.


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

Disables intrinsic for BigInteger::multiplyToLen()


Disables intrinsic for BigInteger::squareToLen()

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

Implements BigInteger.montgomeryMultiply intrinsic.


Implements BigInteger.squareMultiply intrinsic.

Native Memory Tracking Options (available since ZVM

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 and later releases, only "summary" level is supported.

CodeCache Use Optimization Option (available since ZVM

  ZVM Command-Line Options
Command Line Option Description Default


This option 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.


This option 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.



This option 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.


Advanced Miscellaneous Options

  ZVM Command-Line Options
Command Line Option Description Default

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. The object initialization stats and mutator unshatter trap stats reporting is moved below PrintGCExtraDetails, since both of them involve a checkpoint.


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


-XX:CheckpointPromotionDelay=<time in ms>

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


uintx ProfileStartupLimitInSeconds

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


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


(no padding)


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.



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.


-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.



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



Starting with, 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.



(Available since ZVM; 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.



Turns the LLVM-based disassembler off. Starting with Zing, 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.


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.

-XX:GPGCNewGCMemoryManagerName= <New collector name>

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

-XX:GPGCOldGCMemoryManagerName= <Old collector name>

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

-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.

-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.


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.


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.


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)

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


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


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.


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.


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


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.


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


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:



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.

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.

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]]



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


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


Time called


Bytes consumed


Time called


Time called


Time called


GC cause


Both generation collectors total GC time


Percent of memory used by Java heap


Java heap Xmx value


Processes loaded


Last GC cause


New generation GC count


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


Old generation GC count (at that instant)


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


New generation use (at that instant)


Old generation use (at that instant)


Permanent generation use


Time called


Time called


Time called


Elapsed time


Processes unloaded


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:

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.

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.

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


Enables speculative locking.



Enables (Restricted Transactional Memory) RTM heuristics.


-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.



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.


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 Below are the Falcon-specifc command-line options:

Option Description

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


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


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.

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


Use legacy LLVM inliner instead of a highly customized integrated inliner to perform inlining optimizations in Falcon compiles.

The default value is false.


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.


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.


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

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.


Out-of-Memory Options

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

Option Description Default

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.

-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

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.


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.


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


© Azul Systems, Inc. 2019 All rights reserved.

Privacy Policy | Legal | Terms of Use