1Hardened  java  binary  recommended  for launching untrusted code
2JAVA(1)                          JDK Commands                          JAVA(1)
3
4
5
6from the Web e.g. javaws
7

NAME

9       java - launch a Java application
10

SYNOPSIS

12       To launch a class file:
13
14       java [options] mainclass [args ...]
15
16       To launch the main class in a JAR file:
17
18       java [options] -jar jarfile [args ...]
19
20       To launch the main class in a module:
21
22       java [options] -m module[/mainclass] [args ...]
23
24       or
25
26       java [options] --module module[/mainclass] [args ...]
27
28       To launch a single source-file program:
29
30       java [options] source-file [args ...]
31
32       options
33              Optional: Specifies command-line options  separated  by  spaces.
34              See  Overview of Java Options for a description of available op‐
35              tions.
36
37       mainclass
38              Specifies the name of the class to  be  launched.   Command-line
39              entries following classname are the arguments for the main meth‐
40              od.
41
42       -jar jarfile
43              Executes a program encapsulated in a JAR file.  The jarfile  ar‐
44              gument is the name of a JAR file with a manifest that contains a
45              line in the form Main-Class:classname  that  defines  the  class
46              with   the  public static void main(String[] args)  method  that
47              serves as your application's starting point.  When you use -jar,
48              the  specified  JAR  file is the source of all user classes, and
49              other class path settings are  ignored.   If  you're  using  JAR
50              files, then see jar.
51
52       -m or --module module[/mainclass]
53              Executes the main class in a module specified by mainclass if it
54              is given, or, if it is not given, the value in the  module.   In
55              other  words,  mainclass can be used when it is not specified by
56              the module, or to override the value when it is specified.
57
58              See Standard Options for Java.
59
60       source-file
61              Only used to launch a single source-file program.  Specifies the
62              source  file that contains the main class when using source-file
63              mode.   See  Using  Source-File  Mode  to   Launch   Single-File
64              Source-Code Programs
65
66       args ...
67              Optional:   Arguments  following  mainclass,  source-file,  -jar
68              jarfile, and -m or --module module/mainclass are passed as argu‐
69              ments to the main class.
70

DESCRIPTION

72       The  java  command starts a Java application.  It does this by starting
73       the Java Virtual Machine (JVM), loading the specified class, and  call‐
74       ing that class's main() method.  The method must be declared public and
75       static, it must not return any value, and it must accept a String array
76       as a parameter.  The method declaration has the following form:
77
78              public static void main(String[] args)
79
80       In  source-file mode, the java command can launch a class declared in a
81       source  file.   See  Using  Source-File  Mode  to  Launch   Single-File
82       Source-Code Programs for a description of using the source-file mode.
83
84              Note:  You  can  use  the  JDK_JAVA_OPTIONS launcher environment
85              variable to prepend its content to the actual  command  line  of
86              the  java launcher.  See Using the JDK_JAVA_OPTIONS Launcher En‐
87              vironment Variable.
88
89       By default, the first argument that isn't an option of the java command
90       is  the  fully  qualified  name  of the class to be called.  If -jar is
91       specified, then its argument is the name of  the  JAR  file  containing
92       class  and  resource files for the application.  The startup class must
93       be indicated by the Main-Class manifest header in its manifest file.
94
95       Arguments after the class file name or the JAR file name are passed  to
96       the main() method.
97
98   javaw
99       Windows: The javaw command is identical to java, except that with javaw
100       there's no associated console window.  Use javaw when you don't want  a
101       command  prompt  window  to  appear.  The javaw launcher will, however,
102       display a dialog box with error information if a launch fails.
103

USING SOURCE-FILE MODE TO LAUNCH SINGLE-FILE SOURCE-CODE PROGRAMS

105       To launch a class declared in a source file, run the java  launcher  in
106       source-file mode.  Entering source-file mode is determined by two items
107       on the java command line:
108
109       • The first item on the command line that is not an option or  part  of
110         an  option.   In other words, the item in the command line that would
111         otherwise be the main class name.
112
113       • The --source version option, if present.
114
115       If the class identifies an existing file that has a .java extension, or
116       if the --source option is specified, then source-file mode is selected.
117       The source file is then compiled and run.  The --source option  can  be
118       used  to  specify the source version or N of the source code.  This de‐
119       termines the API that can be used.  When you set --source  N,  you  can
120       only use the public API that was defined in JDK N.
121
122              Note:  The  valid  values of N change for each release, with new
123              values added and old values removed.  You'll get an  error  mes‐
124              sage  if  you use a value of N that is no longer supported.  The
125              supported values of N are the current Java SE release (17) and a
126              limited  number  of  previous  releases,  detailed  in  the com‐
127              mand-line help for javac, under the --source and  --release  op‐
128              tions.
129
130       If the file does not have the .java extension, the --source option must
131       be used to tell the java command to  use  the  source-file  mode.   The
132       --source option is used for cases when the source file is a "script" to
133       be executed and the name of the source file does not follow the  normal
134       naming conventions for Java source files.
135
136       In  source-file  mode,  the effect is as though the source file is com‐
137       piled into memory, and the first class found in the source file is exe‐
138       cuted.   Any  arguments placed after the name of the source file in the
139       original command line are passed to the compiled class when it is  exe‐
140       cuted.
141
142       For example, if a file were named HelloWorld.java and contained a class
143       named hello.World, then the source-file  mode  command  to  launch  the
144       class would be:
145
146              java HelloWorld.java
147
148       The  example  illustrates that the class can be in a named package, and
149       does not need to be in the unnamed package.  This  use  of  source-file
150       mode is informally equivalent to using the following two commands where
151       hello.World is the name of the class in the package:
152
153              javac -d <memory> HelloWorld.java
154              java -cp <memory> hello.World
155
156       In source-file mode, any additional command-line options are  processed
157       as follows:
158
159       • The  launcher  scans the options specified before the source file for
160         any that are relevant in order to compile the source file.
161
162         This includes: --class-path, --module-path, --add-exports, --add-mod‐
163         ules, --limit-modules, --patch-module, --upgrade-module-path, and any
164         variant forms of those options.   It  also  includes  the  new  --en‐
165         able-preview option, described in JEP 12.
166
167       • No  provision is made to pass any additional options to the compiler,
168         such as -processor or -Werror.
169
170       • Command-line argument files (@-files) may be  used  in  the  standard
171         way.   Long lists of arguments for either the VM or the program being
172         invoked may be placed in files specified on the command-line by  pre‐
173         fixing the filename with an @ character.
174
175       In source-file mode, compilation proceeds as follows:
176
177       • Any  command-line  options that are relevant to the compilation envi‐
178         ronment are taken into account.
179
180       • No other source files are found and compiled, as if the  source  path
181         is set to an empty value.
182
183       • Annotation processing is disabled, as if -proc:none is in effect.
184
185       • If a version is specified, via the --source option, the value is used
186         as the argument for an implicit --release option for the compilation.
187         This sets both the source version accepted by compiler and the system
188         API that may be used by the code in the source file.
189
190       • The source file is compiled in the context of an unnamed module.
191
192       • The source file should contain one or  more  top-level  classes,  the
193         first of which is taken as the class to be executed.
194
195       • The compiler does not enforce the optional restriction defined at the
196         end of JLS ??7.6, that a type in a named package should  exist  in  a
197         file  whose name is composed from the type name followed by the .java
198         extension.
199
200       • If the source file contains errors, appropriate  error  messages  are
201         written  to  the standard error stream, and the launcher exits with a
202         non-zero exit code.
203
204       In source-file mode, execution proceeds as follows:
205
206       • The class to be executed is the first top-level class  found  in  the
207         source  file.   It  must  contain  a declaration of the standard pub‐
208         lic static void main(String[]) method.
209
210       • The compiled classes are loaded by a custom class loader, that  dele‐
211         gates to the application class loader.  This implies that classes ap‐
212         pearing on the application class path cannot refer to any classes de‐
213         clared in the source file.
214
215       • The  compiled  classes are executed in the context of an unnamed mod‐
216         ule, as though --add-modules=ALL-DEFAULT is in effect.   This  is  in
217         addition  to  any  other  --add-module  options that may be have been
218         specified on the command line.
219
220       • Any arguments appearing after the name of the  file  on  the  command
221         line are passed to the standard main method in the obvious way.
222
223       • It  is  an  error  if  there is a class on the application class path
224         whose name is the same as that of the class to be executed.
225
226       See JEP 330:  Launch  Single-File  Source-Code  Programs  [http://open
227       jdk.java.net/jeps/330] for complete details.
228

USING THE JDK_JAVA_OPTIONS LAUNCHER ENVIRONMENT VARIABLE

230       JDK_JAVA_OPTIONS  prepends  its  content to the options parsed from the
231       command line.  The content of the JDK_JAVA_OPTIONS environment variable
232       is  a  list of arguments separated by white-space characters (as deter‐
233       mined by isspace()).  These are prepended to the command line arguments
234       passed  to java launcher.  The encoding requirement for the environment
235       variable is the same as the java command line on the  system.   JDK_JA‐
236       VA_OPTIONS  environment  variable content is treated in the same manner
237       as that specified in the command line.
238
239       Single (') or double (") quotes can be used to enclose  arguments  that
240       contain  whitespace characters.  All content between the open quote and
241       the first matching close quote are preserved  by  simply  removing  the
242       pair  of  quotes.   In case a matching quote is not found, the launcher
243       will abort with an error message.  @-files are supported  as  they  are
244       specified  in the command line.  However, as in @-files, use of a wild‐
245       card is not supported.   In  order  to  mitigate  potential  misuse  of
246       JDK_JAVA_OPTIONS behavior, options that specify the main class (such as
247       -jar) or cause the java launcher to exit  without  executing  the  main
248       class  (such as -h) are disallowed in the environment variable.  If any
249       of these options appear in the environment variable, the launcher  will
250       abort with an error message.  When JDK_JAVA_OPTIONS is set, the launch‐
251       er prints a message to stderr as a reminder.
252
253       Example:
254
255              $ export JDK_JAVA_OPTIONS='-g @file1 -Dprop=value @file2 -Dws.prop="white spaces"'
256              $ java -Xint @file3
257
258       is equivalent to the command line:
259
260              java -g @file1 -Dprop=value @file2 -Dws.prop="white spaces" -Xint @file3
261

OVERVIEW OF JAVA OPTIONS

263       The java command supports a wide range of options in the following cat‐
264       egories:
265
266Standard  Options for Java: Options guaranteed to be supported by all
267         implementations of the Java Virtual Machine (JVM).  They're used  for
268         common  actions, such as checking the version of the JRE, setting the
269         class path, enabling verbose output, and so on.
270
271Extra Options for Java: General purpose options that are specific  to
272         the  Java HotSpot Virtual Machine.  They aren't guaranteed to be sup‐
273         ported by all JVM implementations, and are subject to change.   These
274         options start with -X.
275
276       The  advanced options aren't recommended for casual use.  These are de‐
277       veloper options used for tuning specific areas of the Java HotSpot Vir‐
278       tual Machine operation that often have specific system requirements and
279       may require privileged access to system configuration parameters.  Sev‐
280       eral  examples of performance tuning are provided in Performance Tuning
281       Examples.  These options aren't guaranteed to be supported by  all  JVM
282       implementations and are subject to change.  Advanced options start with
283       -XX.
284
285Advanced Runtime Options for Java: Control the  runtime  behavior  of
286         the Java HotSpot VM.
287
288Advanced   JIT   Compiler  Options  for  java:  Control  the  dynamic
289         just-in-time (JIT) compilation performed by the Java HotSpot VM.
290
291Advanced Serviceability Options for Java: Enable gathering system in‐
292         formation and performing extensive debugging.
293
294Advanced  Garbage  Collection  Options  for Java: Control how garbage
295         collection (GC) is performed by the Java HotSpot
296
297       Boolean options are used to either enable a feature that's disabled  by
298       default  or  disable a feature that's enabled by default.  Such options
299       don't require a parameter.  Boolean -XX options are enabled  using  the
300       plus sign (-XX:+OptionName) and disabled using the minus sign (-XX:-Op‐
301       tionName).
302
303       For options that require an argument, the  argument  may  be  separated
304       from  the option name by a space, a colon (:), or an equal sign (=), or
305       the argument may directly follow the option (the exact  syntax  differs
306       for  each  option).   If  you're expected to specify the size in bytes,
307       then you can use no suffix, or use the suffix  k  or  K  for  kilobytes
308       (KB), m or M for megabytes (MB), or g or G for gigabytes (GB).  For ex‐
309       ample, to set the size to 8 GB,  you  can  specify  either  8g,  8192m,
310       8388608k, or 8589934592 as the argument.  If you are expected to speci‐
311       fy the percentage, then use a number from 0 to 1.  For example, specify
312       0.25 for 25%.
313
314       The  following  sections describe the options that are obsolete, depre‐
315       cated, and removed:
316
317Deprecated Java Options: Accepted and acted upon --- a warning is is‐
318         sued when they're used.
319
320Obsolete  Java  Options: Accepted but ignored --- a warning is issued
321         when they're used.
322
323Removed Java Options: Removed --- using them results in an error.
324

STANDARD OPTIONS FOR JAVA

326       These are the most commonly used options supported by  all  implementa‐
327       tions of the JVM.
328
329              Note:  To specify an argument for a long option, you can use ei‐
330              ther --name=value or --name value.
331
332       -agentlib:libname[=options]
333              Loads the specified native agent  library.   After  the  library
334              name,  a comma-separated list of options specific to the library
335              can be used.
336
337Linux and macOS: If the  option  -agentlib:foo  is  specified,
338                then  the  JVM attempts to load the library named libfoo.so in
339                the location specified by the LD_LIBRARY_PATH system  variable
340                (on macOS this variable is DYLD_LIBRARY_PATH).
341
342Windows:  If  the  option -agentlib:foo is specified, then the
343                JVM attempts to load the library named foo.dll in the location
344                specified by the PATH system variable.
345
346                The  following  example  shows how to load the Java Debug Wire
347                Protocol (JDWP) library and listen for the  socket  connection
348                on port 8000, suspending the JVM before the main class loads:
349
350                       -agentlib:jdwp=transport=dt_socket,server=y,ad‐
351                       dress=8000
352
353       -agentpath:pathname[=options]
354              Loads the native agent library specified by  the  absolute  path
355              name.   This option is equivalent to -agentlib but uses the full
356              path and file name of the library.
357
358       --class-path classpath, -classpath classpath, or -cp classpath
359              A semicolon (;) separated list of directories, JAR archives, and
360              ZIP archives to search for class files.
361
362              Specifying  classpath overrides any setting of the CLASSPATH en‐
363              vironment variable.  If the class path  option  isn't  used  and
364              classpath  isn't  set,  then the user class path consists of the
365              current directory (.).
366
367              As a special convenience, a class path element that  contains  a
368              base  name of an asterisk (*) is considered equivalent to speci‐
369              fying a list of all the files in the directory with  the  exten‐
370              sion  .jar  or  .JAR .  A Java program can't tell the difference
371              between the two invocations.  For example, if the directory  my‐
372              dir  contains  a.jar  and b.JAR, then the class path element my‐
373              dir/* is expanded to A.jar:b.JAR, except that the order  of  JAR
374              files  is unspecified.  All .jar files in the specified directo‐
375              ry, even hidden ones, are included in the list.   A  class  path
376              entry consisting of an asterisk (*) expands to a list of all the
377              jar files in the current directory.  The  CLASSPATH  environment
378              variable,  where defined, is similarly expanded.  Any class path
379              wildcard expansion that occurs before the Java  VM  is  started.
380              Java programs never see wildcards that aren't expanded except by
381              querying   the   environment,   such   as   by   calling    Sys‐
382              tem.getenv("CLASSPATH").
383
384       --disable-@files
385              Can  be used anywhere on the command line, including in an argu‐
386              ment file, to prevent further @filename expansion.  This  option
387              stops expanding @-argfiles after the option.
388
389       --enable-preview
390              Allows  classes to depend on preview features [https://docs.ora
391              cle.com/en/java/javase/12/language/index.html#JS‐
392              LAN-GUID-5A82FE0E-0CA4-4F1F-B075-564874FE2823] of the release.
393
394       --module-path modulepath... or -p modulepath
395              A  semicolon (;) separated list of directories in which each di‐
396              rectory is a directory of modules.
397
398       --upgrade-module-path modulepath...
399              A semicolon (;) separated list of directories in which each  di‐
400              rectory  is a directory of modules that replace upgradeable mod‐
401              ules in the runtime image.
402
403       --add-modules module[,module...]
404              Specifies the root modules to resolve in addition to the initial
405              module.    module  also  can  be  ALL-DEFAULT,  ALL-SYSTEM,  and
406              ALL-MODULE-PATH.
407
408       --list-modules
409              Lists the observable modules and then exits.
410
411       -d module_name or --describe-module module_name
412              Describes a specified module and then exits.
413
414       --dry-run
415              Creates the VM  but  doesn't  execute  the  main  method.   This
416              --dry-run option might be useful for validating the command-line
417              options such as the module system configuration.
418
419       --validate-modules
420              Validates all modules and exit.   This  option  is  helpful  for
421              finding  conflicts  and  other errors with modules on the module
422              path.
423
424       -Dproperty=value
425              Sets a system property value.  The property variable is a string
426              with  no  spaces  that represents the name of the property.  The
427              value variable is a string that  represents  the  value  of  the
428              property.   If value is a string with spaces, then enclose it in
429              quotation marks (for example -Dfoo="foo bar").
430
431       -disableassertions[:[packagename]...|:classname]   or    -da[:[package‐
432       name]...|:classname]
433              Disables assertions.  By default, assertions are disabled in all
434              packages and classes.   With  no  arguments,  -disableassertions
435              (-da) disables assertions in all packages and classes.  With the
436              packagename argument ending in ..., the switch  disables  asser‐
437              tions  in the specified package and any subpackages.  If the ar‐
438              gument is simply ..., then the switch disables assertions in the
439              unnamed  package  in  the  current  working directory.  With the
440              classname argument, the switch disables assertions in the speci‐
441              fied class.
442
443              The -disableassertions (-da) option applies to all class loaders
444              and to  system  classes  (which  don't  have  a  class  loader).
445              There's  one  exception  to this rule: If the option is provided
446              with no arguments, then it  doesn't  apply  to  system  classes.
447              This  makes  it easy to disable assertions in all classes except
448              for system classes.  The -disablesystemassertions option enables
449              you  to disable assertions in all system classes.  To explicitly
450              enable assertions in specific packages or classes, use the  -en‐
451              ableassertions  (-ea)  option.   Both options can be used at the
452              same time.  For example, to run the MyClass application with as‐
453              sertions  enabled  in  the  package com.wombat.fruitbat (and any
454              subpackages)  but  disabled  in  the   class   com.wombat.fruit‐
455              bat.Brickbat, use the following command:
456
457                     java -ea:com.wombat.fruitbat... -da:com.wombat.fruit‐
458                     bat.Brickbat MyClass
459
460       -disablesystemassertions or -dsa
461              Disables assertions in all system classes.
462
463       -enableassertions[:[packagename]...|:classname]    or    -ea[:[package‐
464       name]...|:classname]
465              Enables  assertions.  By default, assertions are disabled in all
466              packages and  classes.   With  no  arguments,  -enableassertions
467              (-ea)  enables assertions in all packages and classes.  With the
468              packagename argument ending in ..., the  switch  enables  asser‐
469              tions  in the specified package and any subpackages.  If the ar‐
470              gument is simply ..., then the switch enables assertions in  the
471              unnamed  package  in  the  current  working directory.  With the
472              classname argument, the switch enables assertions in the  speci‐
473              fied class.
474
475              The  -enableassertions (-ea) option applies to all class loaders
476              and to  system  classes  (which  don't  have  a  class  loader).
477              There's  one  exception  to this rule: If the option is provided
478              with no arguments, then it  doesn't  apply  to  system  classes.
479              This  makes  it  easy to enable assertions in all classes except
480              for system classes.  The -enablesystemassertions option provides
481              a  separate  switch  to enable assertions in all system classes.
482              To explicitly disable assertions in specific packages or  class‐
483              es,  use  the -disableassertions (-da) option.  If a single com‐
484              mand contains multiple instances of these switches, then they're
485              processed in order, before loading any classes.  For example, to
486              run the MyClass application with assertions enabled only in  the
487              package  com.wombat.fruitbat  (and any subpackages) but disabled
488              in the class  com.wombat.fruitbat.Brickbat,  use  the  following
489              command:
490
491                     java -ea:com.wombat.fruitbat... -da:com.wombat.fruit‐
492                     bat.Brickbat MyClass
493
494       -enablesystemassertions or -esa
495              Enables assertions in all system classes.
496
497       -help, -h, or -?
498              Prints the help message to the error stream.
499
500       --help Prints the help message to the output stream.
501
502       -javaagent:jarpath[=options]
503              Loads the specified Java programming language  agent.   See  ja‐
504              va.lang.instrument.
505
506       --show-version
507              Prints the product version to the output stream and continues.
508
509       -showversion
510              Prints the product version to the error stream and continues.
511
512       --show-module-resolution
513              Shows module resolution output during startup.
514
515       -splash:imagepath
516              Shows  the  splash screen with the image specified by imagepath.
517              HiDPI scaled images are  automatically  supported  and  used  if
518              available.   The  unscaled  image  file name, such as image.ext,
519              should always be passed as the argument to the  -splash  option.
520              The most appropriate scaled image provided is picked up automat‐
521              ically.
522
523              For example, to show the splash.gif file from the images  direc‐
524              tory when starting your application, use the following option:
525
526                     -splash:images/splash.gif
527
528              See the SplashScreen API documentation for more information.
529
530       -verbose:class
531              Displays information about each loaded class.
532
533       -verbose:gc
534              Displays information about each garbage collection (GC) event.
535
536       -verbose:jni
537              Displays  information  about the use of native methods and other
538              Java Native Interface (JNI) activity.
539
540       -verbose:module
541              Displays information about the modules in use.
542
543       --version
544              Prints product version to the output stream and exits.
545
546       -version
547              Prints product version to the error stream and exits.
548
549       -X     Prints the help on extra options to the error stream.
550
551       --help-extra
552              Prints the help on extra options to the output stream.
553
554       @argfile
555              Specifies one or more argument files prefixed by @ used  by  the
556              java command.  It isn't uncommon for the java command line to be
557              very long because of the .jar files  needed  in  the  classpath.
558              The @argfile option overcomes command-line length limitations by
559              enabling the launcher to expand the contents of  argument  files
560              after shell expansion, but before argument processing.  Contents
561              in the argument files are expanded because otherwise, they would
562              be  specified on the command line until the --disable-@files op‐
563              tion was encountered.
564
565              The argument files can also contain the main class name and  all
566              options.   If  an  argument file contains all of the options re‐
567              quired by the java command, then the command line  could  simply
568              be:
569
570                     java @argfile
571
572              See java Command-Line Argument Files for a description and exam‐
573              ples of using @-argfiles.
574

EXTRA OPTIONS FOR JAVA

576       The following java options are general purpose options that are specif‐
577       ic to the Java HotSpot Virtual Machine.
578
579       -Xbatch
580              Disables  background  compilation.  By default, the JVM compiles
581              the method as a background task, running the  method  in  inter‐
582              preter  mode  until the background compilation is finished.  The
583              -Xbatch flag disables background compilation so that compilation
584              of  all  methods  proceeds as a foreground task until completed.
585              This option is equivalent to -XX:-BackgroundCompilation.
586
587       -Xbootclasspath/a:directories|zip|JAR-files
588              Specifies a list of directories, JAR files, and ZIP archives  to
589              append to the end of the default bootstrap class path.
590
591              Linux and macOS: Colons (:) separate entities in this list.
592
593              Windows: Semicolons (;) separate entities in this list.
594
595       -Xcheck:jni
596              Performs additional checks for Java Native Interface (JNI) func‐
597              tions.
598
599              The following checks are considered  indicative  of  significant
600              problems  with  the  native code, and the JVM terminates with an
601              irrecoverable error in such cases:
602
603              • The thread doing the call is not attached to the JVM.
604
605              • The thread doing the call is using the JNIEnv belonging to an‐
606                other thread.
607
608              • A parameter validation check fails:
609
610                • A jfieldID, or jmethodID, is detected as being invalid.  For
611                  example:
612
613                  • Of the wrong type
614
615                  • Associated with the wrong class
616
617                • A parameter of the wrong type is detected.
618
619                • An invalid parameter value is detected.  For example:
620
621                  • NULL where not permitted
622
623                  • An out-of-bounds array index, or frame capacity
624
625                  • A non-UTF-8 string
626
627                  • An invalid JNI reference
628
629                  • An attempt to use a ReleaseXXX function on a parameter not
630                    produced by the corresponding GetXXX function
631
632              The following checks only result in warnings being printed:
633
634              • A  JNI  call was made without checking for a pending exception
635                from a previous JNI call, and the current  call  is  not  safe
636                when an exception may be pending.
637
638              • The  number  of JNI local references existing when a JNI func‐
639                tion terminates exceeds the number guaranteed to be available.
640                See the EnsureLocalcapacity function.
641
642              • A  class  descriptor  is  in decorated format (Lname;) when it
643                should not be.
644
645              • A NULL parameter is allowed, but its use is questionable.
646
647              • Calling other JNI functions in the scope of  Get/ReleasePrimi‐
648                tiveArrayCritical or Get/ReleaseStringCritical
649
650              Expect a performance degradation when this option is used.
651
652       -Xdebug
653              Does nothing.  Provided for backward compatibility.
654
655       -Xdiag Shows additional diagnostic messages.
656
657       -Xint  Runs  the  application in interpreted-only mode.  Compilation to
658              native code is disabled, and all bytecode is executed by the in‐
659              terpreter.  The performance benefits offered by the just-in-time
660              (JIT) compiler aren't present in this mode.
661
662       -Xinternalversion
663              Displays more detailed JVM version information than the -version
664              option, and then exits.
665
666       -Xlog:option
667              Configure  or enable logging with the Java Virtual Machine (JVM)
668              unified logging framework.  See Enable Logging with the JVM Uni‐
669              fied Logging Framework.
670
671       -Xmixed
672              Executes all bytecode by the interpreter except for hot methods,
673              which are compiled to native code.  On by default.  Use -Xint to
674              switch off.
675
676       -Xmn size
677              Sets the initial and maximum size (in bytes) of the heap for the
678              young generation (nursery) in the generational collectors.   Ap‐
679              pend the letter k or K to indicate kilobytes, m or M to indicate
680              megabytes, or g or G to indicate gigabytes.  The  young  genera‐
681              tion  region  of  the  heap is used for new objects.  GC is per‐
682              formed in this region more often than in other regions.  If  the
683              size  for the young generation is too small, then a lot of minor
684              garbage collections are performed.  If the size  is  too  large,
685              then only full garbage collections are performed, which can take
686              a long time to complete.  It is recommended that you do not  set
687              the size for the young generation for the G1 collector, and keep
688              the size for the young generation greater than 25% and less than
689              50%  of the overall heap size for other collectors.  The follow‐
690              ing examples show how to set the initial  and  maximum  size  of
691              young generation to 256 MB using various units:
692
693                     -Xmn256m
694                     -Xmn262144k
695                     -Xmn268435456
696
697              Instead  of  the -Xmn option to set both the initial and maximum
698              size of the heap for the young generation, you can use  -XX:New‐
699              Size to set the initial size and -XX:MaxNewSize to set the maxi‐
700              mum size.
701
702       -Xms size
703              Sets the minimum and initial size (in bytes) of the heap.   This
704              value  must be a multiple of 1024 and greater than 1 MB.  Append
705              the letter k or K to indicate kilobytes,  m  or  M  to  indicate
706              megabytes, g or G to indicate gigabytes.  The following examples
707              show how to set the size of allocated memory to 6 MB using vari‐
708              ous units:
709
710                     -Xms6291456
711                     -Xms6144k
712                     -Xms6m
713
714              Instead  of  the -Xms option to set both the minimum and initial
715              size of the heap, you can use -XX:MinHeapSize to set the minimum
716              size and -XX:InitialHeapSize to set the initial size.
717
718              If you don't set this option, the initial size is set as the sum
719              of the sizes allocated for the old generation and the young gen‐
720              eration.   The initial size of the heap for the young generation
721              can be set using the -Xmn option or the -XX:NewSize option.
722
723       -Xmx size
724              Specifies the maximum size (in bytes) of the heap.   This  value
725              must  be  a  multiple of 1024 and greater than 2 MB.  Append the
726              letter k or  K  to  indicate  kilobytes,  m  or  M  to  indicate
727              megabytes,  or  g or G to indicate gigabytes.  The default value
728              is chosen at runtime based on system configuration.  For  server
729              deployments, -Xms and -Xmx are often set to the same value.  The
730              following examples show how to set the maximum allowed  size  of
731              allocated memory to 80 MB using various units:
732
733                     -Xmx83886080
734                     -Xmx81920k
735                     -Xmx80m
736
737              The -Xmx option is equivalent to -XX:MaxHeapSize.
738
739       -Xnoclassgc
740              Disables garbage collection (GC) of classes.  This can save some
741              GC time, which shortens  interruptions  during  the  application
742              run.  When you specify -Xnoclassgc at startup, the class objects
743              in the application are left untouched during GC and  are  always
744              be considered live.  This can result in more memory being perma‐
745              nently  occupied  which,  if  not  used  carefully,  throws   an
746              out-of-memory exception.
747
748       -Xrs   Reduces  the  use of operating system signals by the JVM.  Shut‐
749              down hooks enable the orderly shutdown of a Java application  by
750              running user cleanup code (such as closing database connections)
751              at shutdown, even if the JVM terminates abruptly.
752
753Linux and macOS:
754
755                • The JVM catches signals to implement shutdown hooks for  un‐
756                  expected  termination.   The  JVM  uses  SIGHUP, SIGINT, and
757                  SIGTERM to initiate the running of shutdown hooks.
758
759                • Applications embedding the JVM frequently need to trap  sig‐
760                  nals  such as SIGINT or SIGTERM, which can lead to interfer‐
761                  ence with the JVM  signal  handlers.   The  -Xrs  option  is
762                  available  to  address  this  issue.  When -Xrs is used, the
763                  signal masks for SIGINT, SIGTERM, SIGHUP, and SIGQUIT aren't
764                  changed  by  the  JVM, and signal handlers for these signals
765                  aren't installed.
766
767Windows:
768
769                • The JVM watches for  console  control  events  to  implement
770                  shutdown  hooks  for  unexpected termination.  Specifically,
771                  the JVM registers a  console  control  handler  that  begins
772                  shutdown-hook  processing and returns TRUE for CTRL_C_EVENT,
773                  CTRL_CLOSE_EVENT,    CTRL_LOGOFF_EVENT,    and    CTRL_SHUT‐
774                  DOWN_EVENT.
775
776                • The JVM uses a similar mechanism to implement the feature of
777                  dumping thread stacks for debugging purposes.  The JVM  uses
778                  CTRL_BREAK_EVENT to perform thread dumps.
779
780                • If  the  JVM  is run as a service (for example, as a servlet
781                  engine for a web  server),  then  it  can  receive  CTRL_LO‐
782                  GOFF_EVENT but shouldn't initiate shutdown because the oper‐
783                  ating system doesn't actually  terminate  the  process.   To
784                  avoid  possible  interference  such as this, the -Xrs option
785                  can be used.  When the -Xrs option is used, the JVM  doesn't
786                  install  a console control handler, implying that it doesn't
787                  watch  for  or   process   CTRL_C_EVENT,   CTRL_CLOSE_EVENT,
788                  CTRL_LOGOFF_EVENT, or CTRL_SHUTDOWN_EVENT.
789
790              There are two consequences of specifying -Xrs:
791
792Linux and macOS: SIGQUIT thread dumps aren't available.
793
794Windows: Ctrl + Break thread dumps aren't available.
795
796              User  code is responsible for causing shutdown hooks to run, for
797              example, by calling the System.exit() when the JVM is to be ter‐
798              minated.
799
800       -Xshare:mode
801              Sets the class data sharing (CDS) mode.
802
803              Possible mode arguments for this option include the following:
804
805              auto   Use shared class data if possible (default).
806
807              on     Require using shared class data, otherwise fail.
808
809                     Note:  The -Xshare:on option is used for testing purposes
810                     only and may cause intermittent failures due to  the  use
811                     of  address  space  layout randomization by the operation
812                     system.  This option should not be used in production en‐
813                     vironments.
814
815              off    Do not attempt to use shared class data.
816
817       -XshowSettings
818              Shows all settings and then continues.
819
820       -XshowSettings:category
821              Shows  settings  and continues.  Possible category arguments for
822              this option include the following:
823
824              all    Shows all categories of settings.  This  is  the  default
825                     value.
826
827              locale Shows settings related to locale.
828
829              properties
830                     Shows settings related to system properties.
831
832              vm     Shows the settings of the JVM.
833
834              system Linux:  Shows  host system or container configuration and
835                     continues.
836
837       -Xss size
838              Sets the thread stack size (in bytes).  Append the letter k or K
839              to indicate KB, m or M to indicate MB, or g or G to indicate GB.
840              The default value depends on the platform:
841
842              • Linux/x64 (64-bit): 1024 KB
843
844              • macOS (64-bit): 1024 KB
845
846              • Windows: The default value depends on virtual memory
847
848              The following examples set the thread stack size to 1024  KB  in
849              different units:
850
851                     -Xss1m
852                     -Xss1024k
853                     -Xss1048576
854
855              This option is similar to -XX:ThreadStackSize.
856
857       --add-reads module=target-module(,target-module)*
858              Updates module to read the target-module, regardless of the mod‐
859              ule declaration.  target-module can be all unnamed to  read  all
860              unnamed modules.
861
862       --add-exports module/package=target-module(,target-module)*
863              Updates module to export package to target-module, regardless of
864              module declaration.  The target-module can be all unnamed to ex‐
865              port to all unnamed modules.
866
867       --add-opens module/package=target-module(,target-module)*
868              Updates  module  to open package to target-module, regardless of
869              module declaration.
870
871       --limit-modules module[,module...]
872              Specifies the limit of the universe of observable modules.
873
874       --patch-module module=file(;file)*
875              Overrides or augments a module with classes and resources in JAR
876              files or directories.
877
878       --source version
879              Sets the version of the source in source-file mode.
880

EXTRA OPTIONS FOR MACOS

882       The following extra options are macOS specific.
883
884       -XstartOnFirstThread
885              Runs the main() method on the first (AppKit) thread.
886
887       -Xdock:name=application_name
888              Overrides the default application name displayed in dock.
889
890       -Xdock:icon=path_to_icon_file
891              Overrides the default icon displayed in dock.
892

ADVANCED OPTIONS FOR JAVA

894       These java options can be used to enable other advanced options.
895
896       -XX:+UnlockDiagnosticVMOptions
897              Unlocks  the  options  intended  for diagnosing the JVM.  By de‐
898              fault, this option is disabled  and  diagnostic  options  aren't
899              available.
900
901              Command  line  options that are enabled with the use of this op‐
902              tion are not supported.  If you encounter issues while using any
903              of these options, it is very likely that you will be required to
904              reproduce the problem without using any of these unsupported op‐
905              tions  before  Oracle  Support can assist with an investigation.
906              It is also possible that any of these options may be removed  or
907              their behavior changed without any warning.
908
909       -XX:+UnlockExperimentalVMOptions
910              Unlocks  the  options  that provide experimental features in the
911              JVM.  By default, this option is disabled and experimental  fea‐
912              tures aren't available.
913

ADVANCED RUNTIME OPTIONS FOR JAVA

915       These java options control the runtime behavior of the Java HotSpot VM.
916
917       -XX:ActiveProcessorCount=x
918              Overrides  the  number of CPUs that the VM will use to calculate
919              the size of thread pools it will use for various operations such
920              as Garbage Collection and ForkJoinPool.
921
922              The  VM  normally  determines the number of available processors
923              from the operating system.  This flag can be useful  for  parti‐
924              tioning  CPU  resources  when running multiple Java processes in
925              docker containers.  This flag is honored even  if  UseContainer‐
926              Support  is not enabled.  See -XX:-UseContainerSupport for a de‐
927              scription of enabling and disabling container support.
928
929       -XX:AllocateHeapAt=path
930              Takes a path to the file system and uses memory mapping to allo‐
931              cate  the  object  heap on the memory device.  Using this option
932              enables the HotSpot VM to allocate the Java object  heap  on  an
933              alternative  memory device, such as an NV-DIMM, specified by the
934              user.
935
936              Alternative memory devices that have the same semantics as DRAM,
937              including  the  semantics  of atomic operations, can be used in‐
938              stead of DRAM for the object heap without changing the  existing
939              application code.  All other memory structures (such as the code
940              heap, metaspace, and thread stacks) continue to reside in DRAM.
941
942              Some operating systems expose non-DRAM memory through  the  file
943              system.   Memory-mapped  files  in these file systems bypass the
944              page cache and provide a direct mapping of virtual memory to the
945              physical  memory on the device.  The existing heap related flags
946              (such as -Xmx and -Xms)  and  garbage-collection  related  flags
947              continue to work as before.
948
949       -XX:-CompactStrings
950              Disables  the  Compact Strings feature.  By default, this option
951              is enabled.  When this option is enabled, Java Strings  contain‐
952              ing  only  single-byte characters are internally represented and
953              stored as single-byte-per-character Strings using  ISO-8859-1  /
954              Latin-1 encoding.  This reduces, by 50%, the amount of space re‐
955              quired for Strings containing only single-byte characters.   For
956              Java  Strings containing at least one multibyte character: these
957              are represented and stored as 2 bytes per character using UTF-16
958              encoding.   Disabling the Compact Strings feature forces the use
959              of UTF-16 encoding as the internal representation for  all  Java
960              Strings.
961
962              Cases  where it may be beneficial to disable Compact Strings in‐
963              clude the following:
964
965              • When it's known that an application overwhelmingly will be al‐
966                locating multibyte character Strings
967
968              • In  the unexpected event where a performance regression is ob‐
969                served in migrating from Java SE 8 to Java SE 9 and an  analy‐
970                sis shows that Compact Strings introduces the regression
971
972              In  both  of  these  scenarios,  disabling Compact Strings makes
973              sense.
974
975       -XX:ErrorFile=filename
976              Specifies the path and file name to which error data is  written
977              when  an  irrecoverable  error occurs.  By default, this file is
978              created in the current working directory and  named  hs_err_pid‐
979              pid.log  where pid is the identifier of the process that encoun‐
980              tered the error.
981
982              The following example shows how to  set  the  default  log  file
983              (note that the identifier of the process is specified as %p):
984
985                     -XX:ErrorFile=./hs_err_pid%p.log
986
987Linux  and  macOS:  The following example shows how to set the
988                error log to /var/log/java/java_error.log:
989
990                       -XX:ErrorFile=/var/log/java/java_error.log
991
992Windows: The following example shows how to set the error  log
993                file to C:/log/java/java_error.log:
994
995                       -XX:ErrorFile=C:/log/java/java_error.log
996
997              If  the file exists, and is writeable, then it will be overwrit‐
998              ten.  Otherwise, if the file can't be created in  the  specified
999              directory (due to insufficient space, permission problem, or an‐
1000              other issue), then the file is created in the temporary directo‐
1001              ry for the operating system:
1002
1003Linux and macOS: The temporary directory is /tmp.
1004
1005Windows:  The temporary directory is specified by the value of
1006                the TMP environment variable;  if  that  environment  variable
1007                isn't defined, then the value of the TEMP environment variable
1008                is used.
1009
1010       -XX:+ExtensiveErrorReports
1011              Enables the reporting of more extensive error information in the
1012              ErrorFile.   This  option can be turned on in environments where
1013              maximal information is desired - even if the resulting logs  may
1014              be  quite large and/or contain information that might be consid‐
1015              ered sensitive.  The information can vary from  release  to  re‐
1016              lease,  and  across different platforms.  By default this option
1017              is disabled.
1018
1019       -XX:FlightRecorderOptions=parameter=value     (or)-XX:FlightRecorderOp‐
1020       tions:parameter=value
1021              Sets the parameters that control the behavior of JFR.
1022
1023              The  following  list  contains the available JFR parameter=value
1024              entries:
1025
1026              globalbuffersize=size
1027                     Specifies the total amount of primary memory used for da‐
1028                     ta  retention.   The  default value is based on the value
1029                     specified for memorysize.  Change the memorysize  parame‐
1030                     ter to alter the size of global buffers.
1031
1032              maxchunksize=size
1033                     Specifies  the maximum size (in bytes) of the data chunks
1034                     in a recording.  Append m or M to  specify  the  size  in
1035                     megabytes  (MB),  or  g or G to specify the size in giga‐
1036                     bytes (GB).  By default, the maximum size of data  chunks
1037                     is set to 12 MB.  The minimum allowed is 1 MB.
1038
1039              memorysize=size
1040                     Determines  how  much  buffer  memory should be used, and
1041                     sets the globalbuffersize and numglobalbuffers parameters
1042                     based  on  the  size specified.  Append m or M to specify
1043                     the size in megabytes (MB), or g or G to specify the size
1044                     in gigabytes (GB).  By default, the memory size is set to
1045                     10 MB.
1046
1047              numglobalbuffers
1048                     Specifies the number of global buffers used.  The default
1049                     value  is based on the memory size specified.  Change the
1050                     memorysize parameter to alter the number of  global  buf‐
1051                     fers.
1052
1053              old-object-queue-size=number-of-objects
1054                     Maximum  number of old objects to track.  By default, the
1055                     number of objects is set to 256.
1056
1057              repository=path
1058                     Specifies the repository (a directory) for temporary disk
1059                     storage.  By default, the system's temporary directory is
1060                     used.
1061
1062              retransform={true|false}
1063                     Specifies whether event classes should  be  retransformed
1064                     using  JVMTI.   If  false,  instrumentation is added when
1065                     event classes are loaded.  By default, this parameter  is
1066                     enabled.
1067
1068              samplethreads={true|false}
1069                     Specifies  whether  thread  sampling  is enabled.  Thread
1070                     sampling occurs only if the  sampling  event  is  enabled
1071                     along with this parameter.  By default, this parameter is
1072                     enabled.
1073
1074              stackdepth=depth
1075                     Stack depth for stack traces.  By default, the  depth  is
1076                     set  to  64  method  calls.  The maximum is 2048.  Values
1077                     greater than 64 could create significant overhead and re‐
1078                     duce performance.
1079
1080              threadbuffersize=size
1081                     Specifies  the  per-thread  local buffer size (in bytes).
1082                     By default, the local buffer size is set to 8  kilobytes,
1083                     with a minimum value of 4 kilobytes.  Overriding this pa‐
1084                     rameter could reduce performance and is not recommended.
1085
1086              You can specify values for  multiple  parameters  by  separating
1087              them with a comma.
1088
1089       -XX:LargePageSizeInBytes=size
1090              Sets  the  maximum  large  page size (in bytes) used by the JVM.
1091              The size argument must be a valid page size supported by the en‐
1092              vironment to have any effect.  Append the letter k or K to indi‐
1093              cate kilobytes, m or M to indicate megabytes, or g or G to indi‐
1094              cate  gigabytes.  By default, the size is set to 0, meaning that
1095              the JVM will use the default large page size for the environment
1096              as the maximum size for large pages.  See Large Pages.
1097
1098              The  following  example describes how to set the large page size
1099              to 1 gigabyte (GB):
1100
1101                     -XX:LargePageSizeInBytes=1g
1102
1103       -XX:MaxDirectMemorySize=size
1104              Sets the maximum total size (in bytes) of the java.nio  package,
1105              direct-buffer allocations.  Append the letter k or K to indicate
1106              kilobytes, m or M to indicate megabytes, or g or G  to  indicate
1107              gigabytes.   By  default, the size is set to 0, meaning that the
1108              JVM chooses the size for NIO direct-buffer allocations automati‐
1109              cally.
1110
1111              The  following  examples  illustrate  how to set the NIO size to
1112              1024 KB in different units:
1113
1114                     -XX:MaxDirectMemorySize=1m
1115                     -XX:MaxDirectMemorySize=1024k
1116                     -XX:MaxDirectMemorySize=1048576
1117
1118       -XX:-MaxFDLimit
1119              Disables the attempt to set the soft limit  for  the  number  of
1120              open  file  descriptors to the hard limit.  By default, this op‐
1121              tion is enabled on all platforms, but  is  ignored  on  Windows.
1122              The  only  time  that you may need to disable this is on Mac OS,
1123              where its use imposes a maximum of 10240, which  is  lower  than
1124              the actual system maximum.
1125
1126       -XX:NativeMemoryTracking=mode
1127              Specifies the mode for tracking JVM native memory usage.  Possi‐
1128              ble mode arguments for this option include the following:
1129
1130              off    Instructs not to track JVM native memory usage.  This  is
1131                     the default behavior if you don't specify the -XX:Native‐
1132                     MemoryTracking option.
1133
1134              summary
1135                     Tracks memory usage only by JVM subsystems, such as  Java
1136                     heap, class, code, and thread.
1137
1138              detail In  addition  to tracking memory usage by JVM subsystems,
1139                     track memory usage  by  individual  CallSite,  individual
1140                     virtual memory region and its committed regions.
1141
1142       -XX:ObjectAlignmentInBytes=alignment
1143              Sets  the  memory  alignment of Java objects (in bytes).  By de‐
1144              fault, the value is set to 8 bytes.  The specified value  should
1145              be  a power of 2, and must be within the range of 8 and 256 (in‐
1146              clusive).  This option  makes  it  possible  to  use  compressed
1147              pointers with large Java heap sizes.
1148
1149              The heap size limit in bytes is calculated as:
1150
1151                     4GB * ObjectAlignmentInBytes
1152
1153                     Note:  As the alignment value increases, the unused space
1154                     between objects also increases.  As a result, you may not
1155                     realize  any benefits from using compressed pointers with
1156                     large Java heap sizes.
1157
1158       -XX:OnError=string
1159              Sets a custom command or a series  of  semicolon-separated  com‐
1160              mands  to run when an irrecoverable error occurs.  If the string
1161              contains spaces, then it must be enclosed in quotation marks.
1162
1163Linux and macOS: The following example shows how  the  -XX:On‐
1164                Error  option can be used to run the gcore command to create a
1165                core image, and start  the  gdb  debugger  to  attach  to  the
1166                process  in  case of an irrecoverable error (the %p designates
1167                the current process identifier):
1168
1169                       -XX:OnError="gcore %p;gdb -p %p"
1170
1171Windows: The following example shows how the  -XX:OnError  op‐
1172                tion  can  be used to run the userdump.exe utility to obtain a
1173                crash dump in case of an irrecoverable error  (the  %p  desig‐
1174                nates  the  current process identifier).  This example assumes
1175                that the path to the userdump.exe utility is specified in  the
1176                PATH environment variable:
1177
1178                       -XX:OnError="userdump.exe %p"
1179
1180       -XX:OnOutOfMemoryError=string
1181              Sets  a  custom  command or a series of semicolon-separated com‐
1182              mands to run when an OutOfMemoryError exception is first thrown.
1183              If  the string contains spaces, then it must be enclosed in quo‐
1184              tation marks.  For an example of a command string, see  the  de‐
1185              scription of the -XX:OnError option.
1186
1187       -XX:+PrintCommandLineFlags
1188              Enables  printing  of  ergonomically selected JVM flags that ap‐
1189              peared on the command line.  It can be useful to know the  ergo‐
1190              nomic values set by the JVM, such as the heap space size and the
1191              selected garbage collector.  By default, this option is disabled
1192              and flags aren't printed.
1193
1194       -XX:+PreserveFramePointer
1195              Selects between using the RBP register as a general purpose reg‐
1196              ister (-XX:-PreserveFramePointer) and using the RBP register  to
1197              hold  the  frame  pointer  of  the  currently  executing  method
1198              (-XX:+PreserveFramePointer .  If the frame pointer is available,
1199              then external profiling tools (for example, Linux perf) can con‐
1200              struct more accurate stack traces.
1201
1202       -XX:+PrintNMTStatistics
1203              Enables printing of collected native memory tracking data at JVM
1204              exit when native memory tracking is enabled (see -XX:NativeMemo‐
1205              ryTracking).  By default, this option  is  disabled  and  native
1206              memory tracking data isn't printed.
1207
1208       -XX:SharedArchiveFile=path
1209              Specifies  the path and name of the class data sharing (CDS) ar‐
1210              chive file
1211
1212              See Application Class Data Sharing.
1213
1214       -XX:SharedArchiveConfigFile=shared_config_file
1215              Specifies additional shared data added to the archive file.
1216
1217       -XX:SharedClassListFile=file_name
1218              Specifies the text file that contains the names of  the  classes
1219              to  store  in  the  class data sharing (CDS) archive.  This file
1220              contains the full name of one class per line, except slashes (/)
1221              replace  dots  (.).   For  example,  to  specify the classes ja‐
1222              va.lang.Object and hello.Main, create a text file that  contains
1223              the following two lines:
1224
1225                     java/lang/Object
1226                     hello/Main
1227
1228              The  classes  that  you specify in this text file should include
1229              the classes that are commonly used by the application.  They may
1230              include  any  classes  from the application, extension, or boot‐
1231              strap class paths.
1232
1233              See Application Class Data Sharing.
1234
1235       -XX:+ShowCodeDetailsInExceptionMessages
1236              Enables  printing  of  improved  NullPointerException  messages.
1237              When  an  application  throws a NullPointerException, the option
1238              enables the JVM to analyze the program's  bytecode  instructions
1239              to  determine  precisely  which reference is null, and describes
1240              the source with a null-detail message.  The null-detail  message
1241              is calculated and returned by NullPointerException.getMessage(),
1242              and will be printed as the  exception  message  along  with  the
1243              method,  filename,  and line number.  By default, this option is
1244              enabled.
1245
1246       -XX:+ShowMessageBoxOnError
1247              Enables the display of a dialog box when the JVM experiences  an
1248              irrecoverable  error.   This  prevents  the JVM from exiting and
1249              keeps the process active so that you can attach a debugger to it
1250              to  investigate the cause of the error.  By default, this option
1251              is disabled.
1252
1253       -XX:StartFlightRecording=parameter=value
1254              Starts a JFR recording for the Java application.  This option is
1255              equivalent  to  the  JFR.start  diagnostic command that starts a
1256              recording during runtime.  You can  set  the  following  parame‐
1257              ter=value entries when starting a JFR recording:
1258
1259              delay=time
1260                     Specifies  the  delay between the Java application launch
1261                     time and the start of the recording.  Append s to specify
1262                     the time in seconds, m for minutes, h for hours, or d for
1263                     days (for example, specifying 10m means 10 minutes).   By
1264                     default,  there's  no delay, and this parameter is set to
1265                     0.
1266
1267              disk={true|false}
1268                     Specifies whether to write data to disk while  recording.
1269                     By default, this parameter is enabled.
1270
1271              dumponexit={true|false}
1272                     Specifies if the running recording is dumped when the JVM
1273                     shuts down.  If enabled and a filename  is  not  entered,
1274                     the recording is written to a file in the directory where
1275                     the process was started.  The file name is a  system-gen‐
1276                     erated  name  that contains the process ID, recording ID,
1277                     and       current       timestamp,       similar       to
1278                     hotspot-pid-47496-id-1-2018_01_25_19_10_41.jfr.   By  de‐
1279                     fault, this parameter is disabled.
1280
1281              duration=time
1282                     Specifies the duration of the  recording.   Append  s  to
1283                     specify  the time in seconds, m for minutes, h for hours,
1284                     or d for days (for example, specifying 5h means 5 hours).
1285                     By  default, the duration isn't limited, and this parame‐
1286                     ter is set to 0.
1287
1288              filename=path
1289                     Specifies the path and name of  the  file  to  which  the
1290                     recording  is  written when the recording is stopped, for
1291                     example:
1292
1293recording.jfr
1294
1295/home/user/recordings/recording.jfr
1296
1297c:\recordings\recording.jfr
1298
1299              name=identifier
1300                     Takes both the name and the identifier of a recording.
1301
1302              maxage=time
1303                     Specifies the maximum age of disk data to  keep  for  the
1304                     recording.   This  parameter  is valid only when the disk
1305                     parameter is set to true.  Append s to specify  the  time
1306                     in  seconds,  m  for  minutes, h for hours, or d for days
1307                     (for example, specifying 30s means 30 seconds).   By  de‐
1308                     fault,  the maximum age isn't limited, and this parameter
1309                     is set to 0s.
1310
1311              maxsize=size
1312                     Specifies the maximum size (in bytes)  of  disk  data  to
1313                     keep  for  the  recording.   This parameter is valid only
1314                     when the disk parameter is set to true.  The  value  must
1315                     not be less than the value for the maxchunksize parameter
1316                     set with -XX:FlightRecorderOptions.  Append  m  or  M  to
1317                     specify  the  size in megabytes, or g or G to specify the
1318                     size in gigabytes.  By default, the maximum size of  disk
1319                     data isn't limited, and this parameter is set to 0.
1320
1321              path-to-gc-roots={true|false}
1322                     Specifies  whether to collect the path to garbage collec‐
1323                     tion (GC) roots at the end of a recording.   By  default,
1324                     this parameter is disabled.
1325
1326                     The  path to GC roots is useful for finding memory leaks,
1327                     but collecting it is time-consuming.  Enable this  option
1328                     only  when  you start a recording for an application that
1329                     you suspect has a memory leak.  If the settings parameter
1330                     is  set to profile, the stack trace from where the poten‐
1331                     tial leaking object was allocated is included in the  in‐
1332                     formation collected.
1333
1334              settings=path
1335                     Specifies  the  path  and name of the event settings file
1336                     (of type JFC).  By default, the default.jfc file is used,
1337                     which is located in JAVA_HOME/lib/jfr.  This default set‐
1338                     tings file collects a predefined set of information  with
1339                     low overhead, so it has minimal impact on performance and
1340                     can be used with recordings that run continuously.
1341
1342                     A second settings file  is  also  provided,  profile.jfc,
1343                     which  provides more data than the default configuration,
1344                     but can have more overhead and impact  performance.   Use
1345                     this  configuration  for  short periods of time when more
1346                     information is needed.
1347
1348              You can specify values for  multiple  parameters  by  separating
1349              them with a comma.  Event settings and .jfc options can be spec‐
1350              ified using the following syntax:
1351
1352              option=value
1353                     Specifies the option value to modify.  To list  available
1354                     options, use the JAVA_HOME/bin/jfr tool.
1355
1356              event-setting=value
1357                     Specifies  the  event  setting  value to modify.  Use the
1358                     form: #= To add a new event  setting,  prefix  the  event
1359                     name with '+'.
1360
1361              You  can specify values for multiple event settings and .jfc op‐
1362              tions by separating them with a comma.  In case  of  a  conflict
1363              between  a  parameter and a .jfc option, the parameter will take
1364              precedence.  The whitespace delimiter can be omitted for  times‐
1365              pan values, i.e.  20ms.  For more information about the settings
1366              syntax, see Javadoc of the jdk.jfr package.
1367
1368       -XX:ThreadStackSize=size
1369              Sets the Java thread stack size (in kilobytes).  Use of a  scal‐
1370              ing  suffix,  such as k, results in the scaling of the kilobytes
1371              value so that -XX:ThreadStackSize=1k sets the Java thread  stack
1372              size  to  1024*1024  bytes or 1 megabyte.  The default value de‐
1373              pends on the platform:
1374
1375              • Linux/x64 (64-bit): 1024 KB
1376
1377              • macOS (64-bit): 1024 KB
1378
1379              • Windows: The default value depends on virtual memory
1380
1381              The following examples show how to set the thread stack size  to
1382              1 megabyte in different units:
1383
1384                     -XX:ThreadStackSize=1k
1385                     -XX:ThreadStackSize=1024
1386
1387              This option is similar to -Xss.
1388
1389       -XX:-UseCompressedOops
1390              Disables  the  use of compressed pointers.  By default, this op‐
1391              tion is enabled, and compressed pointers are  used.   This  will
1392              automatically  limit  the  maximum ergonomically determined Java
1393              heap size to the maximum amount of memory that can be covered by
1394              compressed pointers.  By default this range is 32 GB.
1395
1396              With  compressed oops enabled, object references are represented
1397              as 32-bit offsets instead of 64-bit  pointers,  which  typically
1398              increases  performance  when  running  the application with Java
1399              heap sizes smaller than the compressed oops pointer range.  This
1400              option works only for 64-bit JVMs.
1401
1402              It's  possible  to  use compressed pointers with Java heap sizes
1403              greater than 32 GB.  See the -XX:ObjectAlignmentInBytes option.
1404
1405       -XX:-UseContainerSupport
1406              The VM now provides automatic container detection support, which
1407              allows  the  VM  to determine the amount of memory and number of
1408              processors that are available to a Java process running in dock‐
1409              er  containers.  It uses this information to allocate system re‐
1410              sources.  This support is only available on Linux x64 platforms.
1411              If  supported,  the default for this flag is true, and container
1412              support  is  enabled  by  default.   It  can  be  disabled  with
1413              -XX:-UseContainerSupport.
1414
1415              Unified  Logging is available to help to diagnose issues related
1416              to this support.
1417
1418              Use -Xlog:os+container=trace for maximum  logging  of  container
1419              information.   See  Enable  Logging with the JVM Unified Logging
1420              Framework for a description of using Unified Logging.
1421
1422       -XX:+UseHugeTLBFS
1423              Linux  only:  This  option  is  the  equivalent  of   specifying
1424              -XX:+UseLargePages.   This  option is disabled by default.  This
1425              option pre-allocates all large pages up-front,  when  memory  is
1426              reserved;  consequently the JVM can't dynamically grow or shrink
1427              large pages memory areas; see -XX:UseTransparentHugePages if you
1428              want this behavior.
1429
1430              See Large Pages.
1431
1432       -XX:+UseLargePages
1433              Enables  the  use of large page memory.  By default, this option
1434              is disabled and large page memory isn't used.
1435
1436              See Large Pages.
1437
1438       -XX:+UseTransparentHugePages
1439              Linux only: Enables the use of large pages that can  dynamically
1440              grow  or  shrink.   This option is disabled by default.  You may
1441              encounter performance problems with transparent  huge  pages  as
1442              the  OS  moves other pages around to create huge pages; this op‐
1443              tion is made available for experimentation.
1444
1445       -XX:+AllowUserSignalHandlers
1446              Enables installation of signal handlers by the application.   By
1447              default,  this  option is disabled and the application isn't al‐
1448              lowed to install signal handlers.
1449
1450       -XX:VMOptionsFile=filename
1451              Allows user to specify VM options in a file,  for  example,  ja‐
1452              va -XX:VMOptionsFile=/var/my_vm_options HelloWorld.
1453

ADVANCED JIT COMPILER OPTIONS FOR JAVA

1455       These  java  options control the dynamic just-in-time (JIT) compilation
1456       performed by the Java HotSpot VM.
1457
1458       -XX:AllocateInstancePrefetchLines=lines
1459              Sets the number of lines to prefetch ahead of the instance allo‐
1460              cation  pointer.  By default, the number of lines to prefetch is
1461              set to 1:
1462
1463                     -XX:AllocateInstancePrefetchLines=1
1464
1465       -XX:AllocatePrefetchDistance=size
1466              Sets the size (in bytes) of the prefetch distance for object al‐
1467              location.   Memory about to be written with the value of new ob‐
1468              jects is prefetched up to this distance starting  from  the  ad‐
1469              dress  of  the  last allocated object.  Each Java thread has its
1470              own allocation point.
1471
1472              Negative values denote that prefetch distance is chosen based on
1473              the  platform.   Positive  values are bytes to prefetch.  Append
1474              the letter k or K to indicate kilobytes,  m  or  M  to  indicate
1475              megabytes,  or  g or G to indicate gigabytes.  The default value
1476              is set to -1.
1477
1478              The following example shows how to set the prefetch distance  to
1479              1024 bytes:
1480
1481                     -XX:AllocatePrefetchDistance=1024
1482
1483       -XX:AllocatePrefetchInstr=instruction
1484              Sets  the  prefetch instruction to prefetch ahead of the alloca‐
1485              tion pointer.  Possible values are from 0 to 3.  The actual  in‐
1486              structions  behind  the  values  depend on the platform.  By de‐
1487              fault, the prefetch instruction is set to 0:
1488
1489                     -XX:AllocatePrefetchInstr=0
1490
1491       -XX:AllocatePrefetchLines=lines
1492              Sets the number of cache lines to load after the last object al‐
1493              location  by  using  the prefetch instructions generated in com‐
1494              piled code.  The default value is 1 if the last allocated object
1495              was an instance, and 3 if it was an array.
1496
1497              The  following  example  shows  how  to set the number of loaded
1498              cache lines to 5:
1499
1500                     -XX:AllocatePrefetchLines=5
1501
1502       -XX:AllocatePrefetchStepSize=size
1503              Sets the step size (in bytes) for sequential  prefetch  instruc‐
1504              tions.   Append  the letter k or K to indicate kilobytes, m or M
1505              to indicate megabytes, g or G to  indicate  gigabytes.   By  de‐
1506              fault, the step size is set to 16 bytes:
1507
1508                     -XX:AllocatePrefetchStepSize=16
1509
1510       -XX:AllocatePrefetchStyle=style
1511              Sets  the  generated  code style for prefetch instructions.  The
1512              style argument is an integer from 0 to 3:
1513
1514              0      Don't generate prefetch instructions.
1515
1516              1      Execute  prefetch  instructions  after  each  allocation.
1517                     This is the default setting.
1518
1519              2      Use  the  thread-local  allocation block (TLAB) watermark
1520                     pointer to determine when prefetch instructions are  exe‐
1521                     cuted.
1522
1523              3      Generate one prefetch instruction per cache line.
1524
1525       -XX:+BackgroundCompilation
1526              Enables  background  compilation.  This option is enabled by de‐
1527              fault.  To disable background  compilation,  specify  -XX:-Back‐
1528              groundCompilation (this is equivalent to specifying -Xbatch).
1529
1530       -XX:CICompilerCount=threads
1531              Sets  the number of compiler threads to use for compilation.  By
1532              default, the number of compiler threads is selected automatical‐
1533              ly depending on the number of CPUs and memory available for com‐
1534              piled code.  The following example shows how to set  the  number
1535              of threads to 2:
1536
1537                     -XX:CICompilerCount=2
1538
1539       -XX:+UseDynamicNumberOfCompilerThreads
1540              Dynamically  create compiler thread up to the limit specified by
1541              -XX:CICompilerCount.  This option is enabled by default.
1542
1543       -XX:CompileCommand=command,method[,option]
1544              Specifies a command to perform on a method.  For example, to ex‐
1545              clude  the  indexOf() method of the String class from being com‐
1546              piled, use the following:
1547
1548                     -XX:CompileCommand=exclude,java/lang/String.indexOf
1549
1550              Note that the full class name is specified, including all  pack‐
1551              ages  and  subpackages  separated  by  a  slash (/).  For easier
1552              cut-and-paste operations, it's also possible to use  the  method
1553              name  format produced by the -XX:+PrintCompilation and -XX:+Log‐
1554              Compilation options:
1555
1556                     -XX:CompileCommand=exclude,java.lang.String::indexOf
1557
1558              If the method is specified without the signature, then the  com‐
1559              mand  is applied to all methods with the specified name.  Howev‐
1560              er, you can also specify the signature  of  the  method  in  the
1561              class  file  format.  In this case, you should enclose the argu‐
1562              ments in quotation marks, because otherwise the shell treats the
1563              semicolon as a command end.  For example, if you want to exclude
1564              only the indexOf(String) method of the String class  from  being
1565              compiled, use the following:
1566
1567                     -XX:CompileCommand="exclude,java/lang/String.index‐
1568                     Of,(Ljava/lang/String;)I"
1569
1570              You can also use the asterisk (*) as a wildcard  for  class  and
1571              method  names.  For example, to exclude all indexOf() methods in
1572              all classes from being compiled, use the following:
1573
1574                     -XX:CompileCommand=exclude,*.indexOf
1575
1576              The commas and periods are aliases for spaces, making it  easier
1577              to  pass  compiler commands through a shell.  You can pass argu‐
1578              ments to -XX:CompileCommand using spaces as  separators  by  en‐
1579              closing the argument in quotation marks:
1580
1581                     -XX:CompileCommand="exclude java/lang/String indexOf"
1582
1583              Note  that after parsing the commands passed on the command line
1584              using the -XX:CompileCommand  options,  the  JIT  compiler  then
1585              reads  commands  from  the  .hotspot_compiler file.  You can add
1586              commands to this file or specify  a  different  file  using  the
1587              -XX:CompileCommandFile option.
1588
1589              To  add  several commands, either specify the -XX:CompileCommand
1590              option multiple times, or separate each argument  with  the  new
1591              line separator (\n).  The following commands are available:
1592
1593              break  Sets  a  breakpoint when debugging the JVM to stop at the
1594                     beginning of compilation of the specified method.
1595
1596              compileonly
1597                     Excludes all methods  from  compilation  except  for  the
1598                     specified  method.   As  an  alternative, you can use the
1599                     -XX:CompileOnly option, which lets  you  specify  several
1600                     methods.
1601
1602              dontinline
1603                     Prevents inlining of the specified method.
1604
1605              exclude
1606                     Excludes the specified method from compilation.
1607
1608              help   Prints a help message for the -XX:CompileCommand option.
1609
1610              inline Attempts to inline the specified method.
1611
1612              log    Excludes  compilation  logging (with the -XX:+LogCompila‐
1613                     tion option) for all methods  except  for  the  specified
1614                     method.   By  default,  logging is performed for all com‐
1615                     piled methods.
1616
1617              option Passes a JIT compilation option to the  specified  method
1618                     in  place of the last argument (option).  The compilation
1619                     option is set at the end, after the method name.  For ex‐
1620                     ample,  to  enable  the BlockLayoutByFrequency option for
1621                     the append() method of the StringBuffer  class,  use  the
1622                     following:
1623
1624                            -XX:CompileCommand=option,java/lang/String‐
1625                            Buffer.append,BlockLayoutByFrequency
1626
1627                     You can specify multiple compilation  options,  separated
1628                     by commas or spaces.
1629
1630              print  Prints  generated assembler code after compilation of the
1631                     specified method.
1632
1633              quiet  Instructs not to print the compile commands.  By default,
1634                     the commands that you specify with the -XX:CompileCommand
1635                     option are printed; for example, if you exclude from com‐
1636                     pilation  the  indexOf() method of the String class, then
1637                     the following is printed to standard output:
1638
1639                            CompilerOracle: exclude java/lang/String.indexOf
1640
1641                     You can suppress this by specifying  the  -XX:CompileCom‐
1642                     mand=quiet  option  before  other  -XX:CompileCommand op‐
1643                     tions.
1644
1645       -XX:CompileCommandFile=filename
1646              Sets the file from which JIT compiler commands are read.  By de‐
1647              fault, the .hotspot_compiler file is used to store commands per‐
1648              formed by the JIT compiler.
1649
1650              Each line in the command file  represents  a  command,  a  class
1651              name,  and a method name for which the command is used.  For ex‐
1652              ample, this line prints assembly code for the toString()  method
1653              of the String class:
1654
1655                     print java/lang/String toString
1656
1657              If  you're  using  commands  for  the JIT compiler to perform on
1658              methods, then see the -XX:CompileCommand option.
1659
1660       -XX:CompilerDirectivesFile=file
1661              Adds directives from a file to the directives stack when a  pro‐
1662              gram    starts.    See   Compiler   Control   [https://docs.ora
1663              cle.com/en/java/javase/12/vm/compiler-con‐
1664              trol1.html#GUID-94AD8194-786A-4F19-BFFF-278F8E237F3A].
1665
1666              The  -XX:CompilerDirectivesFile  option  has to be used together
1667              with the -XX:UnlockDiagnosticVMOptions option that unlocks diag‐
1668              nostic JVM options.
1669
1670       -XX:+CompilerDirectivesPrint
1671              Prints  the  directives  stack when the program starts or when a
1672              new directive is added.
1673
1674              The -XX:+CompilerDirectivesPrint option has to be used  together
1675              with the -XX:UnlockDiagnosticVMOptions option that unlocks diag‐
1676              nostic JVM options.
1677
1678       -XX:CompileOnly=methods
1679              Sets the list of methods (separated by commas) to which compila‐
1680              tion  should be restricted.  Only the specified methods are com‐
1681              piled.  Specify each method with the full class name  (including
1682              the packages and subpackages).  For example, to compile only the
1683              length() method of the String class and the size() method of the
1684              List class, use the following:
1685
1686                     -XX:CompileOnly=java/lang/String.length,ja‐
1687                     va/util/List.size
1688
1689              Note that the full class name is specified, including all  pack‐
1690              ages  and  subpackages separated by a slash (/).  For easier cut
1691              and paste operations, it's also possible to use the method  name
1692              format  produced by the -XX:+PrintCompilation and -XX:+LogCompi‐
1693              lation options:
1694
1695                     -XX:CompileOnly=java.lang.String::length,ja‐
1696                     va.util.List::size
1697
1698              Although  wildcards  aren't  supported, you can specify only the
1699              class or package name to compile all methods in  that  class  or
1700              package,  as  well as specify just the method to compile methods
1701              with this name in any class:
1702
1703                     -XX:CompileOnly=java/lang/String
1704                     -XX:CompileOnly=java/lang
1705                     -XX:CompileOnly=.length
1706
1707       -XX:CompileThresholdScaling=scale
1708              Provides unified control of first compilation.  This option con‐
1709              trols  when  methods  are first compiled for both the tiered and
1710              the nontiered modes of operation.   The  CompileThresholdScaling
1711              option  has a floating point value between 0 and +Inf and scales
1712              the thresholds corresponding to the current  mode  of  operation
1713              (both tiered and nontiered).  Setting CompileThresholdScaling to
1714              a value less than 1.0 results in earlier compilation while  val‐
1715              ues  greater than 1.0 delay compilation.  Setting CompileThresh‐
1716              oldScaling to 0 is equivalent to disabling compilation.
1717
1718       -XX:+DoEscapeAnalysis
1719              Enables the use of escape analysis.  This option is  enabled  by
1720              default.   To  disable  the  use  of  escape  analysis,  specify
1721              -XX:-DoEscapeAnalysis.
1722
1723       -XX:InitialCodeCacheSize=size
1724              Sets the initial code cache size (in bytes).  Append the  letter
1725              k or K to indicate kilobytes, m or M to indicate megabytes, or g
1726              or G to indicate gigabytes.  The default value  depends  on  the
1727              platform.   The  initial  code cache size shouldn't be less than
1728              the system's minimal memory page size.   The  following  example
1729              shows how to set the initial code cache size to 32 KB:
1730
1731                     -XX:InitialCodeCacheSize=32k
1732
1733       -XX:+Inline
1734              Enables  method  inlining.  This option is enabled by default to
1735              increase  performance.   To  disable  method  inlining,  specify
1736              -XX:-Inline.
1737
1738       -XX:InlineSmallCode=size
1739              Sets the maximum code size (in bytes) for already compiled meth‐
1740              ods that may be inlined.  This flag only applies to the C2  com‐
1741              piler.   Append  the letter k or K to indicate kilobytes, m or M
1742              to indicate megabytes, or g or G to indicate gigabytes.  The de‐
1743              fault value depends on the platform and on whether tiered compi‐
1744              lation is enabled.  In the following example it is set  to  1000
1745              bytes:
1746
1747                     -XX:InlineSmallCode=1000
1748
1749       -XX:+LogCompilation
1750              Enables   logging  of  compilation  activity  to  a  file  named
1751              hotspot.log in the current working directory.  You can specify a
1752              different log file path and name using the -XX:LogFile option.
1753
1754              By  default,  this  option  is disabled and compilation activity
1755              isn't logged.  The -XX:+LogCompilation option has to be used to‐
1756              gether  with  the  -XX:UnlockDiagnosticVMOptions option that un‐
1757              locks diagnostic JVM options.
1758
1759              You can enable verbose diagnostic output with a message  printed
1760              to  the  console  every  time  a method is compiled by using the
1761              -XX:+PrintCompilation option.
1762
1763       -XX:FreqInlineSize=size
1764              Sets the maximum bytecode size (in bytes) of a hot method to  be
1765              inlined.  This flag only applies to the C2 compiler.  Append the
1766              letter k or  K  to  indicate  kilobytes,  m  or  M  to  indicate
1767              megabytes,  or  g or G to indicate gigabytes.  The default value
1768              depends on the platform.  In the following example it is set  to
1769              325 bytes:
1770
1771                     -XX:FreqInlineSize=325
1772
1773       -XX:MaxInlineSize=size
1774              Sets the maximum bytecode size (in bytes) of a cold method to be
1775              inlined.  This flag only applies to the C2 compiler.  Append the
1776              letter  k  or  K  to  indicate  kilobytes,  m  or  M to indicate
1777              megabytes, or g or G to indicate  gigabytes.   By  default,  the
1778              maximum bytecode size is set to 35 bytes:
1779
1780                     -XX:MaxInlineSize=35
1781
1782       -XX:C1MaxInlineSize=size
1783              Sets the maximum bytecode size (in bytes) of a cold method to be
1784              inlined.  This flag only applies to the C1 compiler.  Append the
1785              letter  k  or  K  to  indicate  kilobytes,  m  or  M to indicate
1786              megabytes, or g or G to indicate  gigabytes.   By  default,  the
1787              maximum bytecode size is set to 35 bytes:
1788
1789                     -XX:MaxInlineSize=35
1790
1791       -XX:MaxTrivialSize=size
1792              Sets the maximum bytecode size (in bytes) of a trivial method to
1793              be inlined.  This flag only applies to the C2 compiler.   Append
1794              the  letter  k  or  K  to indicate kilobytes, m or M to indicate
1795              megabytes, or g or G to indicate  gigabytes.   By  default,  the
1796              maximum bytecode size of a trivial method is set to 6 bytes:
1797
1798                     -XX:MaxTrivialSize=6
1799
1800       -XX:C1MaxTrivialSize=size
1801              Sets the maximum bytecode size (in bytes) of a trivial method to
1802              be inlined.  This flag only applies to the C1 compiler.   Append
1803              the  letter  k  or  K  to indicate kilobytes, m or M to indicate
1804              megabytes, or g or G to indicate  gigabytes.   By  default,  the
1805              maximum bytecode size of a trivial method is set to 6 bytes:
1806
1807                     -XX:MaxTrivialSize=6
1808
1809       -XX:MaxNodeLimit=nodes
1810              Sets the maximum number of nodes to be used during single method
1811              compilation.  By default the value depends on the  features  en‐
1812              abled.   In the following example the maximum number of nodes is
1813              set to 100,000:
1814
1815                     -XX:MaxNodeLimit=100000
1816
1817       -XX:NonNMethodCodeHeapSize=size
1818              Sets the size in bytes of the code segment containing  nonmethod
1819              code.
1820
1821              A nonmethod code segment containing nonmethod code, such as com‐
1822              piler buffers and the  bytecode  interpreter.   This  code  type
1823              stays  in  the  code  cache  forever.  This flag is used only if
1824              -XX:SegmentedCodeCache is enabled.
1825
1826       -XX:NonProfiledCodeHeapSize=size
1827              Sets the size in bytes of the code  segment  containing  nonpro‐
1828              filed methods.  This flag is used only if -XX:SegmentedCodeCache
1829              is enabled.
1830
1831       -XX:+OptimizeStringConcat
1832              Enables the optimization  of  String  concatenation  operations.
1833              This  option is enabled by default.  To disable the optimization
1834              of String concatenation operations, specify -XX:-OptimizeString‐
1835              Concat.
1836
1837       -XX:+PrintAssembly
1838              Enables printing of assembly code for bytecoded and native meth‐
1839              ods by using the external hsdis-<arch>.so or .dll library.   For
1840              64-bit  VM  on  Windows, it's hsdis-amd64.dll.  This lets you to
1841              see the generated code, which may help you to  diagnose  perfor‐
1842              mance issues.
1843
1844              By  default,  this  option  is  disabled and assembly code isn't
1845              printed.  The -XX:+PrintAssembly option has to be used  together
1846              with the -XX:UnlockDiagnosticVMOptions option that unlocks diag‐
1847              nostic JVM options.
1848
1849       -XX:ProfiledCodeHeapSize=size
1850              Sets the size in bytes of the code segment  containing  profiled
1851              methods.   This  flag  is used only if -XX:SegmentedCodeCache is
1852              enabled.
1853
1854       -XX:+PrintCompilation
1855              Enables verbose diagnostic output from the  JVM  by  printing  a
1856              message  to  the  console every time a method is compiled.  This
1857              lets you to see which methods actually  get  compiled.   By  de‐
1858              fault,  this  option  is  disabled  and  diagnostic output isn't
1859              printed.
1860
1861              You can also log compilation activity to a  file  by  using  the
1862              -XX:+LogCompilation option.
1863
1864       -XX:+PrintInlining
1865              Enables  printing  of  inlining  decisions.   This let's you see
1866              which methods are getting inlined.
1867
1868              By default, this option is  disabled  and  inlining  information
1869              isn't printed.  The -XX:+PrintInlining option has to be used to‐
1870              gether with the -XX:+UnlockDiagnosticVMOptions option  that  un‐
1871              locks diagnostic JVM options.
1872
1873       -XX:ReservedCodeCacheSize=size
1874              Sets  the  maximum  code  cache size (in bytes) for JIT-compiled
1875              code.  Append the letter k or K to indicate kilobytes, m or M to
1876              indicate  megabytes,  or  g or G to indicate gigabytes.  The de‐
1877              fault maximum code cache size is 240 MB; if you  disable  tiered
1878              compilation with the option -XX:-TieredCompilation, then the de‐
1879              fault size is 48 MB.  This option has a limit of  2  GB;  other‐
1880              wise,  an  error  is  generated.   The  maximum  code cache size
1881              shouldn't be less than the initial code cache size; see the  op‐
1882              tion -XX:InitialCodeCacheSize.
1883
1884       -XX:RTMAbortRatio=abort_ratio
1885              Specifies  the  RTM abort ratio is specified as a percentage (%)
1886              of all executed RTM transactions.  If a number of aborted trans‐
1887              actions  becomes greater than this ratio, then the compiled code
1888              is deoptimized.  This ratio is used  when  the  -XX:+UseRTMDeopt
1889              option  is  enabled.   The  default  value of this option is 50.
1890              This means that the compiled code is deoptimized if 50%  of  all
1891              transactions are aborted.
1892
1893       -XX:RTMRetryCount=number_of_retries
1894              Specifies  the  number of times that the RTM locking code is re‐
1895              tried, when it is aborted or busy, before falling  back  to  the
1896              normal  locking mechanism.  The default value for this option is
1897              5.  The -XX:UseRTMLocking option must be enabled.
1898
1899       -XX:+SegmentedCodeCache
1900              Enables segmentation of the code cache.  Without  the  -XX:+Seg‐
1901              mentedCodeCache,  the  code cache consists of one large segment.
1902              With -XX:+SegmentedCodeCache, we have separate segments for non‐
1903              method,  profiled  method,  and  nonprofiled method code.  These
1904              segments aren't resized at runtime.  The feature is  enabled  by
1905              default if tiered compilation is enabled (-XX:+TieredCompilation
1906              ) and -XX:ReservedCodeCacheSize >= 240 MB.  The  advantages  are
1907              better  control of the memory footprint, reduced code fragmenta‐
1908              tion, and better iTLB/iCache behavior due to improved  locality.
1909              iTLB/iCache  is a CPU-specific term meaning Instruction Transla‐
1910              tion Lookaside Buffer (ITLB).  ICache is an instruction cache in
1911              theCPU.   The  implementation  of the code cache can be found in
1912              the file: /share/vm/code/codeCache.cpp.
1913
1914       -XX:StartAggressiveSweepingAt=percent
1915              Forces stack scanning of active methods to  aggressively  remove
1916              unused  code when only the given percentage of the code cache is
1917              free.  The default value is 10%.
1918
1919       -XX:-TieredCompilation
1920              Disables the use of tiered compilation.  By default, this option
1921              is enabled.
1922
1923       -XX:UseSSE=version
1924              Enables  the  use of SSE instruction set of a specified version.
1925              Is set by default to the  highest  supported  version  available
1926              (x86 only).
1927
1928       -XX:UseAVX=version
1929              Enables  the  use of AVX instruction set of a specified version.
1930              Is set by default to the  highest  supported  version  available
1931              (x86 only).
1932
1933       -XX:+UseAES
1934              Enables hardware-based AES intrinsics for hardware that supports
1935              it.  This option is on by default on hardware that has the  nec‐
1936              essary  instructions.   The  -XX:+UseAES  is used in conjunction
1937              with UseAESIntrinsics.  Flags that control  intrinsics  now  re‐
1938              quire the option -XX:+UnlockDiagnosticVMOptions.
1939
1940       -XX:+UseAESIntrinsics
1941              Enables   AES  intrinsics.   Specifying-XX:+UseAESIntrinsics  is
1942              equivalent to  also  enabling  -XX:+UseAES.   To  disable  hard‐
1943              ware-based  AES  intrinsics,  specify -XX:-UseAES -XX:-UseAESIn‐
1944              trinsics.  For example, to enable hardware AES, use the  follow‐
1945              ing flags:
1946
1947                     -XX:+UseAES -XX:+UseAESIntrinsics
1948
1949              Flags  that  control  intrinsics now require the option -XX:+Un‐
1950              lockDiagnosticVMOptions.
1951
1952       -XX:+UseAESCTRIntrinsics
1953              Analogous to -XX:+UseAESIntrinsics enables AES/CTR intrinsics.
1954
1955       -XX:+UseGHASHIntrinsics
1956              Controls the use of GHASH intrinsics.   Enabled  by  default  on
1957              platforms  that  support  the corresponding instructions.  Flags
1958              that control intrinsics now require the option  -XX:+UnlockDiag‐
1959              nosticVMOptions.
1960
1961       -XX:+UseBASE64Intrinsics
1962              Controls the use of accelerated BASE64 encoding routines for ja‐
1963              va.util.Base64.  Enabled by default on  platforms  that  support
1964              it.   Flags  that  control  intrinsics  now  require  the option
1965              -XX:+UnlockDiagnosticVMOptions.
1966
1967       -XX:+UseAdler32Intrinsics
1968              Controls the use of Adler32 checksum algorithm intrinsic for ja‐
1969              va.util.zip.Adler32.   Enabled by default on platforms that sup‐
1970              port it.  Flags that control intrinsics now require  the  option
1971              -XX:+UnlockDiagnosticVMOptions.
1972
1973       -XX:+UseCRC32Intrinsics
1974              Controls  the  use  of CRC32 intrinsics for java.util.zip.CRC32.
1975              Enabled by default on platforms that  support  it.   Flags  that
1976              control  intrinsics  now  require the option -XX:+UnlockDiagnos‐
1977              ticVMOptions.
1978
1979       -XX:+UseCRC32CIntrinsics
1980              Controls the use of CRC32C intrinsics for  java.util.zip.CRC32C.
1981              Enabled  by  default  on  platforms that support it.  Flags that
1982              control intrinsics now require  the  option  -XX:+UnlockDiagnos‐
1983              ticVMOptions.
1984
1985       -XX:+UseSHA
1986              Enables  hardware-based intrinsics for SHA crypto hash functions
1987              for some hardware.  The UseSHA option  is  used  in  conjunction
1988              with   the   UseSHA1Intrinsics,  UseSHA256Intrinsics,  and  Use‐
1989              SHA512Intrinsics options.
1990
1991              The UseSHA and UseSHA*Intrinsics flags are enabled by default on
1992              machines that support the corresponding instructions.
1993
1994              This  feature  is  applicable  only  when  using the sun.securi‐
1995              ty.provider.Sun provider for SHA operations.  Flags that control
1996              intrinsics  now  require  the  option -XX:+UnlockDiagnosticVMOp‐
1997              tions.
1998
1999              To  disable  all  hardware-based  SHA  intrinsics,  specify  the
2000              -XX:-UseSHA.   To  disable  only a particular SHA intrinsic, use
2001              the appropriate corresponding option.   For  example:  -XX:-Use‐
2002              SHA256Intrinsics.
2003
2004       -XX:+UseSHA1Intrinsics
2005              Enables  intrinsics  for SHA-1 crypto hash function.  Flags that
2006              control intrinsics now require  the  option  -XX:+UnlockDiagnos‐
2007              ticVMOptions.
2008
2009       -XX:+UseSHA256Intrinsics
2010              Enables  intrinsics  for  SHA-224  and SHA-256 crypto hash func‐
2011              tions.  Flags that control intrinsics  now  require  the  option
2012              -XX:+UnlockDiagnosticVMOptions.
2013
2014       -XX:+UseSHA512Intrinsics
2015              Enables  intrinsics  for  SHA-384  and SHA-512 crypto hash func‐
2016              tions.  Flags that control intrinsics  now  require  the  option
2017              -XX:+UnlockDiagnosticVMOptions.
2018
2019       -XX:+UseMathExactIntrinsics
2020              Enables   intrinsification  of  various  java.lang.Math.*Exact()
2021              functions.  Enabled by default.  Flags that  control  intrinsics
2022              now require the option -XX:+UnlockDiagnosticVMOptions.
2023
2024       -XX:+UseMultiplyToLenIntrinsic
2025              Enables intrinsification of BigInteger.multiplyToLen().  Enabled
2026              by default on platforms that support it.  Flags that control in‐
2027              trinsics now require the option -XX:+UnlockDiagnosticVMOptions.
2028
2029       -XX:+UseSquareToLenIntrinsic
2030              Enables  intrinsification  of BigInteger.squareToLen().  Enabled
2031              by default on platforms that support it.  Flags that control in‐
2032              trinsics now require the option -XX:+UnlockDiagnosticVMOptions.
2033
2034       -XX:+UseMulAddIntrinsic
2035              Enables intrinsification of BigInteger.mulAdd().  Enabled by de‐
2036              fault on platforms that support it.  Flags that control  intrin‐
2037              sics now require the option -XX:+UnlockDiagnosticVMOptions.
2038
2039       -XX:+UseMontgomeryMultiplyIntrinsic
2040              Enables   intrinsification  of  BigInteger.montgomeryMultiply().
2041              Enabled by default on platforms that  support  it.   Flags  that
2042              control  intrinsics  now  require the option -XX:+UnlockDiagnos‐
2043              ticVMOptions.
2044
2045       -XX:+UseMontgomerySquareIntrinsic
2046              Enables intrinsification of BigInteger.montgomerySquare().   En‐
2047              abled  by default on platforms that support it.  Flags that con‐
2048              trol intrinsics now require the  option  -XX:+UnlockDiagnosticV‐
2049              MOptions.
2050
2051       -XX:+UseCMoveUnconditionally
2052              Generates  CMove  (scalar and vector) instructions regardless of
2053              profitability analysis.
2054
2055       -XX:+UseCodeCacheFlushing
2056              Enables flushing of the code cache before shutting down the com‐
2057              piler.   This option is enabled by default.  To disable flushing
2058              of the code cache before shutting  down  the  compiler,  specify
2059              -XX:-UseCodeCacheFlushing.
2060
2061       -XX:+UseCondCardMark
2062              Enables  checking  if the card is already marked before updating
2063              the card table.  This option is disabled by default.  It  should
2064              be  used  only  on  machines with multiple sockets, where it in‐
2065              creases the performance of Java applications that rely  on  con‐
2066              current operations.
2067
2068       -XX:+UseCountedLoopSafepoints
2069              Keeps safepoints in counted loops.  Its default value depends on
2070              whether the selected  garbage  collector  requires  low  latency
2071              safepoints.
2072
2073       -XX:LoopStripMiningIter=number_of_iterations
2074              Controls the number of iterations in the inner strip mined loop.
2075              Strip mining transforms counted  loops  into  two  level  nested
2076              loops.   Safepoints  are  kept in the outer loop while the inner
2077              loop can execute at full speed.  This option controls the  maxi‐
2078              mum  number  of iterations in the inner loop.  The default value
2079              is 1,000.
2080
2081       -XX:LoopStripMiningIterShortLoop=number_of_iterations
2082              Controls loop strip mining optimization.  Loops with the  number
2083              of  iterations  less  than specified will not have safepoints in
2084              them.  Default value is 1/10th of -XX:LoopStripMiningIter.
2085
2086       -XX:+UseFMA
2087              Enables hardware-based FMA intrinsics for hardware where FMA in‐
2088              structions  are  available  (such as, Intel and ARM64).  FMA in‐
2089              trinsics are generated for the java.lang.Math.fma(a, b, c) meth‐
2090              ods that calculate the value of ( a * b + c ) expressions.
2091
2092       -XX:+UseRTMDeopt
2093              Autotunes  RTM locking depending on the abort ratio.  This ratio
2094              is specified by the -XX:RTMAbortRatio option.  If the number  of
2095              aborted  transactions  exceeds  the abort ratio, then the method
2096              containing the lock is deoptimized and recompiled with all locks
2097              as  normal  locks.   This  option  is  disabled by default.  The
2098              -XX:+UseRTMLocking option must be enabled.
2099
2100       -XX:+UseRTMLocking
2101              Generates Restricted Transactional Memory (RTM) locking code for
2102              all  inflated  locks,  with  the normal locking mechanism as the
2103              fallback handler.  This option is disabled by default.   Options
2104              related  to  RTM  are  available  only  on x86 CPUs that support
2105              Transactional Synchronization Extensions (TSX).
2106
2107              RTM is part of Intel's TSX, which is an x86 instruction set  ex‐
2108              tension  and  facilitates the creation of multithreaded applica‐
2109              tions.  RTM introduces  the  new  instructions  XBEGIN,  XABORT,
2110              XEND, and XTEST.  The XBEGIN and XEND instructions enclose a set
2111              of instructions to run as a  transaction.   If  no  conflict  is
2112              found when running the transaction, then the memory and register
2113              modifications are committed together at  the  XEND  instruction.
2114              The  XABORT instruction can be used to explicitly abort a trans‐
2115              action and the XTEST instruction checks if a set of instructions
2116              is being run in a transaction.
2117
2118              A lock on a transaction is inflated when another thread tries to
2119              access the same transaction, thereby blocking  the  thread  that
2120              didn't  originally  request  access to the transaction.  RTM re‐
2121              quires that a fallback set of operations be specified in case  a
2122              transaction  aborts  or  fails.   An RTM lock is a lock that has
2123              been delegated to the TSX's system.
2124
2125              RTM improves performance for highly  contended  locks  with  low
2126              conflict  in  a  critical region (which is code that must not be
2127              accessed by more than one thread concurrently).   RTM  also  im‐
2128              proves  the performance of coarse-grain locking, which typically
2129              doesn't   perform   well    in    multithreaded    applications.
2130              (Coarse-grain  locking is the strategy of holding locks for long
2131              periods to minimize the overhead of taking and releasing  locks,
2132              while  fine-grained locking is the strategy of trying to achieve
2133              maximum parallelism by locking only when necessary and unlocking
2134              as soon as possible.) Also, for lightly contended locks that are
2135              used by different threads, RTM can reduce false cache line shar‐
2136              ing,  also known as cache line ping-pong.  This occurs when mul‐
2137              tiple threads from different processors are accessing  different
2138              resources,  but  the  resources share the same cache line.  As a
2139              result, the processors repeatedly invalidate the cache lines  of
2140              other processors, which forces them to read from main memory in‐
2141              stead of their cache.
2142
2143       -XX:+UseSuperWord
2144              Enables the transformation of scalar operations  into  superword
2145              operations.   Superword  is  a vectorization optimization.  This
2146              option is enabled by default.  To disable the transformation  of
2147              scalar operations into superword operations, specify -XX:-UseSu‐
2148              perWord.
2149

ADVANCED SERVICEABILITY OPTIONS FOR JAVA

2151       These java options provide the ability to gather system information and
2152       perform extensive debugging.
2153
2154       -XX:+DisableAttachMechanism
2155              Disables  the  mechanism  that lets tools attach to the JVM.  By
2156              default, this option is disabled, meaning that the attach mecha‐
2157              nism  is enabled and you can use diagnostics and troubleshooting
2158              tools such as jcmd, jstack, jmap, and jinfo.
2159
2160                     Note: The tools such as jcmd,  jinfo,  jmap,  and  jstack
2161                     shipped  with  the  JDK  aren't  supported when using the
2162                     tools from one JDK version to  troubleshoot  a  different
2163                     JDK version.
2164
2165       -XX:+ExtendedDTraceProbes
2166              Linux  and macOS: Enables additional dtrace tool probes that af‐
2167              fect the performance.  By default, this option is  disabled  and
2168              dtrace performs only standard probes.
2169
2170       -XX:+HeapDumpOnOutOfMemoryError
2171              Enables  the  dumping  of the Java heap to a file in the current
2172              directory  by  using  the  heap  profiler  (HPROF)  when  a  ja‐
2173              va.lang.OutOfMemoryError exception is thrown.  You can explicit‐
2174              ly set the heap dump file path and name using the  -XX:HeapDump‐
2175              Path  option.   By default, this option is disabled and the heap
2176              isn't dumped when an OutOfMemoryError exception is thrown.
2177
2178       -XX:HeapDumpPath=path
2179              Sets the path and file name for writing the heap  dump  provided
2180              by  the heap profiler (HPROF) when the -XX:+HeapDumpOnOutOfMemo‐
2181              ryError option is set.  By default, the file is created  in  the
2182              current  working  directory,  and it's named java_pid<pid>.hprof
2183              where <pid> is the identifier of the process that caused the er‐
2184              ror.   The  following  example shows how to set the default file
2185              explicitly (%p represents the current process identifier):
2186
2187                     -XX:HeapDumpPath=./java_pid%p.hprof
2188
2189Linux and macOS: The following example shows how  to  set  the
2190                heap dump file to /var/log/java/java_heapdump.hprof:
2191
2192                       -XX:HeapDumpPath=/var/log/java/java_heapdump.hprof
2193
2194Windows:  The following example shows how to set the heap dump
2195                file to C:/log/java/java_heapdump.log:
2196
2197                       -XX:HeapDumpPath=C:/log/java/java_heapdump.log
2198
2199       -XX:LogFile=path
2200              Sets the path and file name to where log data  is  written.   By
2201              default,  the  file is created in the current working directory,
2202              and it's named hotspot.log.
2203
2204Linux and macOS: The following example shows how  to  set  the
2205                log file to /var/log/java/hotspot.log:
2206
2207                       -XX:LogFile=/var/log/java/hotspot.log
2208
2209Windows:  The  following example shows how to set the log file
2210                to C:/log/java/hotspot.log:
2211
2212                       -XX:LogFile=C:/log/java/hotspot.log
2213
2214       -XX:+PrintClassHistogram
2215              Enables printing of a class instance histogram after one of  the
2216              following events:
2217
2218Linux and macOS: Control+Break
2219
2220Windows: Control+C (SIGTERM)
2221
2222              By default, this option is disabled.
2223
2224              Setting  this  option  is  equivalent to running the jmap -histo
2225              command, or the jcmd pid GC.class_histogram command,  where  pid
2226              is the current Java process identifier.
2227
2228       -XX:+PrintConcurrentLocks
2229              Enables  printing of java.util.concurrent locks after one of the
2230              following events:
2231
2232Linux and macOS: Control+Break
2233
2234Windows: Control+C (SIGTERM)
2235
2236              By default, this option is disabled.
2237
2238              Setting this option is equivalent to running the jstack -l  com‐
2239              mand  or  the jcmd pid Thread.print -l command, where pid is the
2240              current Java process identifier.
2241
2242       -XX:+PrintFlagsRanges
2243              Prints the range specified and allows automatic testing  of  the
2244              values.  See Validate Java Virtual Machine Flag Arguments.
2245
2246       -XX:+PerfDataSaveToFile
2247              If  enabled,  saves  jstat binary data when the Java application
2248              exits.  This binary data is saved  in  a  file  named  hsperfda‐
2249              ta_pid, where pid is the process identifier of the Java applica‐
2250              tion that you ran.  Use the jstat command to display the perfor‐
2251              mance data contained in this file as follows:
2252
2253                     jstat -class file:///path/hsperfdata_pid
2254
2255                     jstat -gc file:///path/hsperfdata_pid
2256
2257       -XX:+UsePerfData
2258              Enables the perfdata feature.  This option is enabled by default
2259              to allow JVM monitoring and performance testing.   Disabling  it
2260              suppresses  the  creation  of the hsperfdata_userid directories.
2261              To disable the perfdata feature, specify -XX:-UsePerfData.
2262

ADVANCED GARBAGE COLLECTION OPTIONS FOR JAVA

2264       These java options control how garbage collection (GC) is performed  by
2265       the Java HotSpot VM.
2266
2267       -XX:+AggressiveHeap
2268              Enables Java heap optimization.  This sets various parameters to
2269              be optimal for long-running jobs with intensive  memory  alloca‐
2270              tion,  based on the configuration of the computer (RAM and CPU).
2271              By default, the option is disabled and the heap sizes  are  con‐
2272              figured less aggressively.
2273
2274       -XX:+AlwaysPreTouch
2275              Requests  the  VM to touch every page on the Java heap after re‐
2276              questing it from the operating system and before handing  memory
2277              out to the application.  By default, this option is disabled and
2278              all pages are committed as the application uses the heap space.
2279
2280       -XX:ConcGCThreads=threads
2281              Sets the number of threads used for concurrent GC.  Sets threads
2282              to  approximately  1/4 of the number of parallel garbage collec‐
2283              tion threads.  The default value depends on the number  of  CPUs
2284              available to the JVM.
2285
2286              For  example,  to set the number of threads for concurrent GC to
2287              2, specify the following option:
2288
2289                     -XX:ConcGCThreads=2
2290
2291       -XX:+DisableExplicitGC
2292              Enables the option that disables processing of calls to the Sys‐
2293              tem.gc()  method.   This  option is disabled by default, meaning
2294              that calls to System.gc() are processed.  If processing of calls
2295              to  System.gc() is disabled, then the JVM still performs GC when
2296              necessary.
2297
2298       -XX:+ExplicitGCInvokesConcurrent
2299              Enables invoking of concurrent GC by using the  System.gc()  re‐
2300              quest.   This  option  is disabled by default and can be enabled
2301              only with the -XX:+UseG1GC option.
2302
2303       -XX:G1AdaptiveIHOPNumInitialSamples=number
2304              When -XX:UseAdaptiveIHOP is enabled, this option sets the number
2305              of  completed  marking  cycles  used  to gather samples until G1
2306              adaptively determines the optimum value of -XX:InitiatingHeapOc‐
2307              cupancyPercent.   Before,  G1  uses  the  value  of -XX:Initiat‐
2308              ingHeapOccupancyPercent directly for this purpose.  The  default
2309              value is 3.
2310
2311       -XX:G1HeapRegionSize=size
2312              Sets  the size of the regions into which the Java heap is subdi‐
2313              vided when using the garbage-first (G1) collector.  The value is
2314              a  power of 2 and can range from 1 MB to 32 MB.  The default re‐
2315              gion size is determined ergonomically based  on  the  heap  size
2316              with a goal of approximately 2048 regions.
2317
2318              The  following  example  sets the size of the subdivisions to 16
2319              MB:
2320
2321                     -XX:G1HeapRegionSize=16m
2322
2323       -XX:G1HeapWastePercent=percent
2324              Sets the percentage of heap that you're willing to  waste.   The
2325              Java  HotSpot  VM  doesn't initiate the mixed garbage collection
2326              cycle when the reclaimable percentage  is  less  than  the  heap
2327              waste percentage.  The default is 5 percent.
2328
2329       -XX:G1MaxNewSizePercent=percent
2330              Sets  the  percentage of the heap size to use as the maximum for
2331              the young generation size.  The default value is 60  percent  of
2332              your Java heap.
2333
2334              This is an experimental flag.  This setting replaces the -XX:De‐
2335              faultMaxNewGenPercent setting.
2336
2337       -XX:G1MixedGCCountTarget=number
2338              Sets the target number of  mixed  garbage  collections  after  a
2339              marking  cycle  to  collect  old  regions with at most G1MixedG‐
2340              CLIveThresholdPercent live data.  The default is 8 mixed garbage
2341              collections.   The  goal  for  mixed collections is to be within
2342              this target number.
2343
2344       -XX:G1MixedGCLiveThresholdPercent=percent
2345              Sets the occupancy threshold for an old region to be included in
2346              a  mixed  garbage collection cycle.  The default occupancy is 85
2347              percent.
2348
2349              This  is  an  experimental  flag.   This  setting  replaces  the
2350              -XX:G1OldCSetRegionLiveThresholdPercent setting.
2351
2352       -XX:G1NewSizePercent=percent
2353              Sets  the  percentage  of the heap to use as the minimum for the
2354              young generation size.  The default value is 5 percent  of  your
2355              Java heap.
2356
2357              This is an experimental flag.  This setting replaces the -XX:De‐
2358              faultMinNewGenPercent setting.
2359
2360       -XX:G1OldCSetRegionThresholdPercent=percent
2361              Sets an upper limit on the number of old regions to be collected
2362              during a mixed garbage collection cycle.  The default is 10 per‐
2363              cent of the Java heap.
2364
2365       -XX:G1ReservePercent=percent
2366              Sets the percentage of the heap (0 to 50) that's reserved  as  a
2367              false ceiling to reduce the possibility of promotion failure for
2368              the G1 collector.  When you increase or decrease the percentage,
2369              ensure  that  you adjust the total Java heap by the same amount.
2370              By default, this option is set to 10%.
2371
2372              The following example sets the reserved heap to 20%:
2373
2374                     -XX:G1ReservePercent=20
2375
2376       -XX:+G1UseAdaptiveIHOP
2377              Controls adaptive calculation of the old generation occupancy to
2378              start  background  work  preparing for an old generation collec‐
2379              tion.  If enabled,  G1  uses  -XX:InitiatingHeapOccupancyPercent
2380              for the first few times as specified by the value of -XX:G1Adap‐
2381              tiveIHOPNumInitialSamples, and after that adaptively  calculates
2382              a  new optimum value for the initiating occupancy automatically.
2383              Otherwise, the old generation collection process  always  starts
2384              at  the  old  generation  occupancy  determined  by -XX:Initiat‐
2385              ingHeapOccupancyPercent.
2386
2387              The default is enabled.
2388
2389       -XX:InitialHeapSize=size
2390              Sets the initial size (in bytes) of the memory allocation  pool.
2391              This  value  must be either 0, or a multiple of 1024 and greater
2392              than 1 MB.  Append the letter k or K to indicate kilobytes, m or
2393              M  to  indicate megabytes, or g or G to indicate gigabytes.  The
2394              default value is selected at run time based on the  system  con‐
2395              figuration.
2396
2397              The  following  examples  show  how to set the size of allocated
2398              memory to 6 MB using various units:
2399
2400                     -XX:InitialHeapSize=6291456
2401                     -XX:InitialHeapSize=6144k
2402                     -XX:InitialHeapSize=6m
2403
2404              If you set this option to 0, then the initial size is set as the
2405              sum  of the sizes allocated for the old generation and the young
2406              generation.  The size of the heap for the young  generation  can
2407              be set using the -XX:NewSize option.
2408
2409       -XX:InitialRAMPercentage=percent
2410              Sets  the initial amount of memory that the JVM will use for the
2411              Java heap before applying ergonomics heuristics as a  percentage
2412              of  the maximum amount determined as described in the -XX:MaxRAM
2413              option.  The default value is 1.5625 percent.
2414
2415              The following example shows how to set  the  percentage  of  the
2416              initial amount of memory used for the Java heap:
2417
2418                     -XX:InitialRAMPercentage=5
2419
2420       -XX:InitialSurvivorRatio=ratio
2421              Sets  the  initial  survivor  space ratio used by the throughput
2422              garbage collector (which is enabled  by  the  -XX:+UseParallelGC
2423              option).   Adaptive  sizing  is  enabled  by  default  with  the
2424              throughput garbage collector by using the -XX:+UseParallelGC op‐
2425              tion,  and the survivor space is resized according to the appli‐
2426              cation behavior, starting with the initial value.   If  adaptive
2427              sizing  is  disabled  (using  the -XX:-UseAdaptiveSizePolicy op‐
2428              tion), then the -XX:SurvivorRatio option should be used  to  set
2429              the  size  of the survivor space for the entire execution of the
2430              application.
2431
2432              The following formula can be used to calculate the initial  size
2433              of  survivor space (S) based on the size of the young generation
2434              (Y), and the initial survivor space ratio (R):
2435
2436                     S=Y/(R+2)
2437
2438              The 2 in the equation denotes two survivor spaces.   The  larger
2439              the  value  specified  as  the initial survivor space ratio, the
2440              smaller the initial survivor space size.
2441
2442              By default, the initial survivor space ratio is set  to  8.   If
2443              the default value for the young generation space size is used (2
2444              MB), then the initial size of the survivor space is 0.2 MB.
2445
2446              The following example shows how  to  set  the  initial  survivor
2447              space ratio to 4:
2448
2449                     -XX:InitialSurvivorRatio=4
2450
2451       -XX:InitiatingHeapOccupancyPercent=percent
2452              Sets  the  percentage of the old generation occupancy (0 to 100)
2453              at which to start the first few concurrent  marking  cycles  for
2454              the G1 garbage collector.
2455
2456              By  default,  the  initiating value is set to 45%.  A value of 0
2457              implies nonstop concurrent GC cycles from the beginning until G1
2458              adaptively sets this value.
2459
2460              See also the -XX:G1UseAdaptiveIHOP and -XX:G1AdaptiveIHOPNumIni‐
2461              tialSamples options.
2462
2463              The following example shows how to set the initiating heap occu‐
2464              pancy to 75%:
2465
2466                     -XX:InitiatingHeapOccupancyPercent=75
2467
2468       -XX:MaxGCPauseMillis=time
2469              Sets  a  target for the maximum GC pause time (in milliseconds).
2470              This is a soft goal, and the JVM will make its  best  effort  to
2471              achieve  it.   The  specified  value  doesn't adapt to your heap
2472              size.  By default, for G1 the maximum pause time target  is  200
2473              milliseconds.   The  other  generational collectors do not use a
2474              pause time goal by default.
2475
2476              The following example shows how to set the maximum target  pause
2477              time to 500 ms:
2478
2479                     -XX:MaxGCPauseMillis=500
2480
2481       -XX:MaxHeapSize=size
2482              Sets  the  maximum size (in byes) of the memory allocation pool.
2483              This value must be a multiple of 1024 and  greater  than  2  MB.
2484              Append  the letter k or K to indicate kilobytes, m or M to indi‐
2485              cate megabytes, or g or G to indicate  gigabytes.   The  default
2486              value is selected at run time based on the system configuration.
2487              For server  deployments,  the  options  -XX:InitialHeapSize  and
2488              -XX:MaxHeapSize are often set to the same value.
2489
2490              The  following examples show how to set the maximum allowed size
2491              of allocated memory to 80 MB using various units:
2492
2493                     -XX:MaxHeapSize=83886080
2494                     -XX:MaxHeapSize=81920k
2495                     -XX:MaxHeapSize=80m
2496
2497              The -XX:MaxHeapSize option is equivalent to -Xmx.
2498
2499       -XX:MaxHeapFreeRatio=percent
2500              Sets the maximum allowed percentage of free  heap  space  (0  to
2501              100)  after  a  GC event.  If free heap space expands above this
2502              value, then the heap is shrunk.  By default, this value  is  set
2503              to 70%.
2504
2505              Minimize the Java heap size by lowering the values of the param‐
2506              eters MaxHeapFreeRatio (default value is 70%) and MinHeapFreeRa‐
2507              tio  (default  value  is  40%)  with  the  command-line  options
2508              -XX:MaxHeapFreeRatio and  -XX:MinHeapFreeRatio.   Lowering  Max‐
2509              HeapFreeRatio  to  as  low as 10% and MinHeapFreeRatio to 5% has
2510              successfully reduced the heap size without too much  performance
2511              regression;  however, results may vary greatly depending on your
2512              application.  Try different values for  these  parameters  until
2513              they're  as  low as possible yet still retain acceptable perfor‐
2514              mance.
2515
2516                     -XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5
2517
2518              Customers trying to keep the heap small should also add the  op‐
2519              tion  -XX:-ShrinkHeapInSteps.   See  Performance Tuning Examples
2520              for a description of using this option to  keep  the  Java  heap
2521              small  by  reducing  the dynamic footprint for embedded applica‐
2522              tions.
2523
2524       -XX:MaxMetaspaceSize=size
2525              Sets the maximum amount of native memory that can  be  allocated
2526              for  class  metadata.   By default, the size isn't limited.  The
2527              amount of metadata for an application depends on the application
2528              itself,  other  running  applications,  and the amount of memory
2529              available on the system.
2530
2531              The following example shows how to set the maximum class metada‐
2532              ta size to 256 MB:
2533
2534                     -XX:MaxMetaspaceSize=256m
2535
2536       -XX:MaxNewSize=size
2537              Sets  the maximum size (in bytes) of the heap for the young gen‐
2538              eration (nursery).  The default value is set ergonomically.
2539
2540       -XX:MaxRAM=size
2541              Sets the maximum amount of memory that the JVM may use  for  the
2542              Java  heap  before  applying ergonomics heuristics.  The default
2543              value is the maximum amount  of  available  memory  to  the  JVM
2544              process or 128 GB, whichever is lower.
2545
2546              The maximum amount of available memory to the JVM process is the
2547              minimum of the machine's physical memory and any constraints set
2548              by the environment (e.g.  container).
2549
2550              Specifying this option disables automatic use of compressed oops
2551              if the combined result of this and other options influencing the
2552              maximum  amount of memory is larger than the range of memory ad‐
2553              dressable by compressed  oops.   See  -XX:UseCompressedOops  for
2554              further information about compressed oops.
2555
2556              The  following  example  shows  how to set the maximum amount of
2557              available memory for sizing the Java heap to 2 GB:
2558
2559                     -XX:MaxRAM=2G
2560
2561       -XX:MaxRAMPercentage=percent
2562              Sets the maximum amount of memory that the JVM may use  for  the
2563              Java  heap before applying ergonomics heuristics as a percentage
2564              of the maximum amount determined as described in the  -XX:MaxRAM
2565              option.  The default value is 25 percent.
2566
2567              Specifying this option disables automatic use of compressed oops
2568              if the combined result of this and other options influencing the
2569              maximum  amount of memory is larger than the range of memory ad‐
2570              dressable by compressed  oops.   See  -XX:UseCompressedOops  for
2571              further information about compressed oops.
2572
2573              The  following  example  shows  how to set the percentage of the
2574              maximum amount of memory used for the Java heap:
2575
2576                     -XX:MaxRAMPercentage=75
2577
2578       -XX:MinRAMPercentage=percent
2579              Sets the maximum amount of memory that the JVM may use  for  the
2580              Java  heap before applying ergonomics heuristics as a percentage
2581              of the maximum amount determined as described in the  -XX:MaxRAM
2582              option for small heaps.  A small heap is a heap of approximately
2583              125 MB.  The default value is 50 percent.
2584
2585              The following example shows how to set  the  percentage  of  the
2586              maximum amount of memory used for the Java heap for small heaps:
2587
2588                     -XX:MinRAMPercentage=75
2589
2590       -XX:MaxTenuringThreshold=threshold
2591              Sets  the maximum tenuring threshold for use in adaptive GC siz‐
2592              ing.  The largest value is 15.  The default value is 15 for  the
2593              parallel (throughput) collector.
2594
2595              The  following  example  shows  how  to set the maximum tenuring
2596              threshold to 10:
2597
2598                     -XX:MaxTenuringThreshold=10
2599
2600       -XX:MetaspaceSize=size
2601              Sets the size of the allocated class metadata space  that  trig‐
2602              gers  a  garbage  collection the first time it's exceeded.  This
2603              threshold for a garbage collection is increased or decreased de‐
2604              pending  on  the  amount of metadata used.  The default size de‐
2605              pends on the platform.
2606
2607       -XX:MinHeapFreeRatio=percent
2608              Sets the minimum allowed percentage of free  heap  space  (0  to
2609              100) after a GC event.  If free heap space falls below this val‐
2610              ue, then the heap is expanded.  By default, this value is set to
2611              40%.
2612
2613              Minimize Java heap size by lowering the values of the parameters
2614              MaxHeapFreeRatio (default value  is  70%)  and  MinHeapFreeRatio
2615              (default  value  is  40%) with the command-line options -XX:Max‐
2616              HeapFreeRatio and -XX:MinHeapFreeRatio.  Lowering MaxHeapFreeRa‐
2617              tio to as low as 10% and MinHeapFreeRatio to 5% has successfully
2618              reduced the heap size without too much  performance  regression;
2619              however, results may vary greatly depending on your application.
2620              Try different values for these parameters until they're  as  low
2621              as possible, yet still retain acceptable performance.
2622
2623                     -XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5
2624
2625              Customers  trying to keep the heap small should also add the op‐
2626              tion -XX:-ShrinkHeapInSteps.  See  Performance  Tuning  Examples
2627              for  a  description  of  using this option to keep the Java heap
2628              small by reducing the dynamic footprint  for  embedded  applica‐
2629              tions.
2630
2631       -XX:MinHeapSize=size
2632              Sets  the minimum size (in bytes) of the memory allocation pool.
2633              This value must be either 0, or a multiple of 1024  and  greater
2634              than 1 MB.  Append the letter k or K to indicate kilobytes, m or
2635              M to indicate megabytes, or g or G to indicate  gigabytes.   The
2636              default  value  is selected at run time based on the system con‐
2637              figuration.
2638
2639              The following examples show how to set the mimimum size of allo‐
2640              cated memory to 6 MB using various units:
2641
2642                     -XX:MinHeapSize=6291456
2643                     -XX:MinHeapSize=6144k
2644                     -XX:MinHeapSize=6m
2645
2646              If you set this option to 0, then the minimum size is set to the
2647              same value as the initial size.
2648
2649       -XX:NewRatio=ratio
2650              Sets the ratio between young and old generation sizes.   By  de‐
2651              fault, this option is set to 2.  The following example shows how
2652              to set the young-to-old ratio to 1:
2653
2654                     -XX:NewRatio=1
2655
2656       -XX:NewSize=size
2657              Sets the initial size (in bytes) of the heap for the young  gen‐
2658              eration  (nursery).   Append the letter k or K to indicate kilo‐
2659              bytes, m or M to indicate megabytes, or g or G to indicate giga‐
2660              bytes.
2661
2662              The young generation region of the heap is used for new objects.
2663              GC is performed in this region more often than in other regions.
2664              If  the  size  for the young generation is too low, then a large
2665              number of minor GCs are performed.  If the  size  is  too  high,
2666              then  only full GCs are performed, which can take a long time to
2667              complete.  It is recommended that you  keep  the  size  for  the
2668              young generation greater than 25% and less than 50% of the over‐
2669              all heap size.
2670
2671              The following examples show how to set the initial size  of  the
2672              young generation to 256 MB using various units:
2673
2674                     -XX:NewSize=256m
2675                     -XX:NewSize=262144k
2676                     -XX:NewSize=268435456
2677
2678              The -XX:NewSize option is equivalent to -Xmn.
2679
2680       -XX:ParallelGCThreads=threads
2681              Sets the number of the stop-the-world (STW) worker threads.  The
2682              default value depends on the number of CPUs available to the JVM
2683              and the garbage collector selected.
2684
2685              For example, to set the number of threads for G1 GC to 2, speci‐
2686              fy the following option:
2687
2688                     -XX:ParallelGCThreads=2
2689
2690       -XX:+ParallelRefProcEnabled
2691              Enables parallel reference processing.  By default, this  option
2692              is disabled.
2693
2694       -XX:+PrintAdaptiveSizePolicy
2695              Enables  printing  of information about adaptive-generation siz‐
2696              ing.  By default, this option is disabled.
2697
2698       -XX:+ScavengeBeforeFullGC
2699              Enables GC of the young generation before each  full  GC.   This
2700              option  is enabled by default.  It is recommended that you don't
2701              disable it, because scavenging the  young  generation  before  a
2702              full  GC can reduce the number of objects reachable from the old
2703              generation space into the young generation space.  To disable GC
2704              of  the young generation before each full GC, specify the option
2705              -XX:-ScavengeBeforeFullGC.
2706
2707       -XX:SoftRefLRUPolicyMSPerMB=time
2708              Sets the amount of time (in milliseconds) a softly reachable ob‐
2709              ject  is kept active on the heap after the last time it was ref‐
2710              erenced.  The default value is one second of lifetime  per  free
2711              megabyte  in  the  heap.  The -XX:SoftRefLRUPolicyMSPerMB option
2712              accepts  integer  values  representing  milliseconds   per   one
2713              megabyte  of  the current heap size (for Java HotSpot Client VM)
2714              or the maximum possible heap size (for Java HotSpot Server  VM).
2715              This  difference  means  that  the Client VM tends to flush soft
2716              references rather than grow the  heap,  whereas  the  Server  VM
2717              tends  to  grow  the heap rather than flush soft references.  In
2718              the latter case, the value of the -Xmx option has a  significant
2719              effect on how quickly soft references are garbage collected.
2720
2721              The following example shows how to set the value to 2.5 seconds:
2722
2723              -XX:SoftRefLRUPolicyMSPerMB=2500
2724
2725       -XX:-ShrinkHeapInSteps
2726              Incrementally  reduces  the Java heap to the target size, speci‐
2727              fied by the option -XX:MaxHeapFreeRatio.  This option is enabled
2728              by  default.   If disabled, then it immediately reduces the Java
2729              heap to the target size instead of  requiring  multiple  garbage
2730              collection  cycles.  Disable this option if you want to minimize
2731              the Java heap  size.   You  will  likely  encounter  performance
2732              degradation when this option is disabled.
2733
2734              See  Performance  Tuning Examples for a description of using the
2735              MaxHeapFreeRatio option to keep the Java heap small by  reducing
2736              the dynamic footprint for embedded applications.
2737
2738       -XX:StringDeduplicationAgeThreshold=threshold
2739              Identifies  String  objects  reaching the specified age that are
2740              considered candidates for deduplication.  An object's age  is  a
2741              measure  of  how  many times it has survived garbage collection.
2742              This is sometimes referred to as tenuring.
2743
2744                     Note: String objects that are promoted to an old heap re‐
2745                     gion  before this age has been reached are always consid‐
2746                     ered candidates for deduplication.  The default value for
2747                     this  option  is  3.  See the -XX:+UseStringDeduplication
2748                     option.
2749
2750       -XX:SurvivorRatio=ratio
2751              Sets the ratio between eden space size and survivor space  size.
2752              By  default,  this  option  is  set to 8.  The following example
2753              shows how to set the eden/survivor space ratio to 4:
2754
2755                     -XX:SurvivorRatio=4
2756
2757       -XX:TargetSurvivorRatio=percent
2758              Sets the desired percentage of survivor space (0  to  100)  used
2759              after  young garbage collection.  By default, this option is set
2760              to 50%.
2761
2762              The following example shows how to set the target survivor space
2763              ratio to 30%:
2764
2765                     -XX:TargetSurvivorRatio=30
2766
2767       -XX:TLABSize=size
2768              Sets  the  initial  size (in bytes) of a thread-local allocation
2769              buffer (TLAB).  Append the letter k or K to indicate  kilobytes,
2770              m  or  M to indicate megabytes, or g or G to indicate gigabytes.
2771              If this option is set to 0, then the  JVM  selects  the  initial
2772              size automatically.
2773
2774              The  following example shows how to set the initial TLAB size to
2775              512 KB:
2776
2777                     -XX:TLABSize=512k
2778
2779       -XX:+UseAdaptiveSizePolicy
2780              Enables the use of adaptive generation sizing.  This  option  is
2781              enabled  by  default.   To  disable  adaptive generation sizing,
2782              specify -XX:-UseAdaptiveSizePolicy and set the size of the memo‐
2783              ry  allocation  pool  explicitly.  See the -XX:SurvivorRatio op‐
2784              tion.
2785
2786       -XX:+UseG1GC
2787              Enables the use of the  garbage-first  (G1)  garbage  collector.
2788              It's a server-style garbage collector, targeted for multiproces‐
2789              sor machines with a large amount of RAM.  This option  meets  GC
2790              pause  time  goals with high probability, while maintaining good
2791              throughput.  The G1 collector is  recommended  for  applications
2792              requiring large heaps (sizes of around 6 GB or larger) with lim‐
2793              ited GC latency requirements (a  stable  and  predictable  pause
2794              time below 0.5 seconds).  By default, this option is enabled and
2795              G1 is used as the default garbage collector.
2796
2797       -XX:+UseGCOverheadLimit
2798              Enables the use of a policy that limits the proportion  of  time
2799              spent  by  the JVM on GC before an OutOfMemoryError exception is
2800              thrown.  This option is enabled, by default, and the parallel GC
2801              will  throw  an  OutOfMemoryError  if more than 98% of the total
2802              time is spent on garbage collection and less than 2% of the heap
2803              is  recovered.  When the heap is small, this feature can be used
2804              to prevent applications from running for long  periods  of  time
2805              with little or no progress.  To disable this option, specify the
2806              option -XX:-UseGCOverheadLimit.
2807
2808       -XX:+UseNUMA
2809              Enables performance optimization of an application on a  machine
2810              with nonuniform memory architecture (NUMA) by increasing the ap‐
2811              plication's use of lower latency memory.  By default,  this  op‐
2812              tion  is disabled and no optimization for NUMA is made.  The op‐
2813              tion is available only when the parallel  garbage  collector  is
2814              used (-XX:+UseParallelGC).
2815
2816       -XX:+UseParallelGC
2817              Enables the use of the parallel scavenge garbage collector (also
2818              known as the throughput collector) to improve the performance of
2819              your application by leveraging multiple processors.
2820
2821              By default, this option is disabled and the default collector is
2822              used.
2823
2824       -XX:+UseSerialGC
2825              Enables the use of the serial garbage collector.  This is gener‐
2826              ally  the  best  choice  for  small and simple applications that
2827              don't require any special functionality from garbage collection.
2828              By default, this option is disabled and the default collector is
2829              used.
2830
2831       -XX:+UseSHM
2832              Linux only: Enables the JVM to use shared memory to set up large
2833              pages.
2834
2835              See Large Pages for setting up large pages.
2836
2837       -XX:+UseStringDeduplication
2838              Enables  string  deduplication.  By default, this option is dis‐
2839              abled.  To use this option, you must  enable  the  garbage-first
2840              (G1) garbage collector.
2841
2842              String  deduplication reduces the memory footprint of String ob‐
2843              jects on the Java heap by taking advantage of the fact that many
2844              String  objects  are  identical.   Instead of each String object
2845              pointing to its own character array,  identical  String  objects
2846              can point to and share the same character array.
2847
2848       -XX:+UseTLAB
2849              Enables the use of thread-local allocation blocks (TLABs) in the
2850              young generation space.  This option is enabled by default.   To
2851              disable the use of TLABs, specify the option -XX:-UseTLAB.
2852
2853       -XX:+UseZGC
2854              Enables the use of the Z garbage collector (ZGC).  This is a low
2855              latency garbage collector, providing max pause times  of  a  few
2856              milliseconds, at some throughput cost.  Pause times are indepen‐
2857              dent of what heap size is used.  Supports heap sizes from 8MB to
2858              16TB.
2859
2860       -XX:ZAllocationSpikeTolerance=factor
2861              Sets  the  allocation spike tolerance for ZGC.  By default, this
2862              option is set to 2.0.  This factor describes the level of  allo‐
2863              cation  spikes  to  expect.   For example, using a factor of 3.0
2864              means the current allocation rate can be expected to  triple  at
2865              any time.
2866
2867       -XX:ZCollectionInterval=seconds
2868              Sets  the  maximum  interval  (in seconds) between two GC cycles
2869              when using ZGC.  By default, this option is set to 0 (disabled).
2870
2871       -XX:ZFragmentationLimit=percent
2872              Sets the maximum acceptable heap fragmentation (in percent)  for
2873              ZGC.  By default, this option is set to 25.  Using a lower value
2874              will cause the heap to be compacted more  aggressively,  to  re‐
2875              claim more memory at the cost of using more CPU time.
2876
2877       -XX:+ZProactive
2878              Enables  proactive  GC  cycles when using ZGC.  By default, this
2879              option is enabled.  ZGC will start a proactive GC cycle if doing
2880              so  is  expected  to have minimal impact on the running applica‐
2881              tion.  This is useful if the application is mostly idle or allo‐
2882              cates very few objects, but you still want to keep the heap size
2883              down and allow reference processing to happen  even  when  there
2884              are a lot of free space on the heap.
2885
2886       -XX:+ZUncommit
2887              Enables  uncommitting  of unused heap memory when using ZGC.  By
2888              default, this option is enabled.  Uncommitting unused heap memo‐
2889              ry  will  lower  the  memory footprint of the JVM, and make that
2890              memory available for other processes to use.
2891
2892       -XX:ZUncommitDelay=seconds
2893              Sets the amount of time (in seconds) that heap memory must  have
2894              been  unused  before being uncommitted.  By default, this option
2895              is set to 300 (5 minutes).  Committing and  uncommitting  memory
2896              are  relatively  expensive operations.  Using a lower value will
2897              cause heap memory to be uncommitted earlier, at the risk of soon
2898              having to commit it again.
2899

DEPRECATED JAVA OPTIONS

2901       These  java options are deprecated and might be removed in a future JDK
2902       release.  They're still accepted and acted upon, but a warning  is  is‐
2903       sued when they're used.
2904
2905       -Xfuture
2906              Enables  strict class-file format checks that enforce close con‐
2907              formance to the  class-file  format  specification.   Developers
2908              should  use this flag when developing new code.  Stricter checks
2909              may become the default in future releases.
2910
2911       -Xloggc:filename
2912              Sets the file to which verbose GC events information  should  be
2913              redirected  for  logging.   The  -Xloggc  option overrides -ver‐
2914              bose:gc if both are given with the same  java  command.   -Xlog‐
2915              gc:filename  is  replaced by -Xlog:gc:filename.  See Enable Log‐
2916              ging with the JVM Unified Logging Framework.
2917
2918              Example:
2919
2920              -Xlog:gc:garbage-collection.log
2921
2922       -XX:+FlightRecorder
2923              Enables the use of Java Flight Recorder (JFR) during the runtime
2924              of the application.  Since JDK 8u40 this option has not been re‐
2925              quired to use JFR.
2926
2927       -XX:InitialRAMFraction=ratio
2928              Sets the initial amount of memory that the JVM may use  for  the
2929              Java  heap  before  applying ergonomics heuristics as a ratio of
2930              the maximum amount determined as described in the -XX:MaxRAM op‐
2931              tion.  The default value is 64.
2932
2933              Use the option -XX:InitialRAMPercentage instead.
2934
2935       -XX:MaxRAMFraction=ratio
2936              Sets  the  maximum amount of memory that the JVM may use for the
2937              Java heap before applying ergonomics heuristics as a fraction of
2938              the maximum amount determined as described in the -XX:MaxRAM op‐
2939              tion.  The default value is 4.
2940
2941              Specifying this option disables automatic use of compressed oops
2942              if the combined result of this and other options influencing the
2943              maximum amount of memory is larger than the range of memory  ad‐
2944              dressable  by  compressed  oops.   See -XX:UseCompressedOops for
2945              further information about compressed oops.
2946
2947              Use the option -XX:MaxRAMPercentage instead.
2948
2949       -XX:MinRAMFraction=ratio
2950              Sets the maximum amount of memory that the JVM may use  for  the
2951              Java heap before applying ergonomics heuristics as a fraction of
2952              the maximum amount determined as described in the -XX:MaxRAM op‐
2953              tion  for  small heaps.  A small heap is a heap of approximately
2954              125 MB.  The default value is 2.
2955
2956              Use the option -XX:MinRAMPercentage instead.
2957
2958       -XX:+UseBiasedLocking
2959              Enables the use of biased locking.  Some applications with  sig‐
2960              nificant  amounts of uncontended synchronization may attain sig‐
2961              nificant speedups with this flag enabled, but applications  with
2962              certain patterns of locking may see slowdowns.
2963
2964              By default, this option is disabled.
2965

OBSOLETE JAVA OPTIONS

2967       These java options are still accepted but ignored, and a warning is is‐
2968       sued when they're used.
2969
2970       --illegal-access=parameter
2971              Controlled relaxed strong encapsulation, as defined in  JEP  261
2972              [https://openjdk.java.net/jeps/261#Relaxed-strong-encapsula‐
2973              tion].  This  option  was  deprecated  in  JDK  16  by  JEP  396
2974              [https://openjdk.java.net/jeps/396]  and made obsolete in JDK 17
2975              by JEP 403 [https://openjdk.java.net/jeps/403].
2976

REMOVED JAVA OPTIONS

2978       These java options have been removed in JDK 17 and using  them  results
2979       in an error of:
2980
2981              Unrecognized VM option option-name
2982
2983       -XX:+UseMembar
2984              Enabled  issuing  membars on thread-state transitions.  This op‐
2985              tion was  disabled  by  default  on  all  platforms  except  ARM
2986              servers, where it was enabled.
2987
2988       -XX:MaxPermSize=size
2989              Sets  the  maximum  permanent  generation space size (in bytes).
2990              This option was deprecated  in  JDK  8  and  superseded  by  the
2991              -XX:MaxMetaspaceSize option.
2992
2993       -XX:PermSize=size
2994              Sets  the space (in bytes) allocated to the permanent generation
2995              that triggers a garbage collection if it's exceeded.   This  op‐
2996              tion  was  deprecated  in JDK 8 and superseded by the -XX:Metas‐
2997              paceSize option.
2998
2999       -XX:+TraceClassLoading
3000              Enables tracing of classes as they are loaded.  By default, this
3001              option is disabled and classes aren't traced.
3002
3003              The  replacement Unified Logging syntax is -Xlog:class+load=lev‐
3004              el.  See Enable Logging with the JVM Unified Logging Framework
3005
3006              Use level=info for regular information, or level=debug for addi‐
3007              tional  information.   In Unified Logging syntax, -verbose:class
3008              equals -Xlog:class+load=info,class+unload=info.
3009
3010       -XX:+TraceClassLoadingPreorder
3011              Enables tracing of all loaded classes  in  the  order  in  which
3012              they're  referenced.   By  default,  this option is disabled and
3013              classes aren't traced.
3014
3015              The  replacement  Unified  Logging  syntax  is  -Xlog:class+pre‐
3016              order=debug.   See  Enable  Logging with the JVM Unified Logging
3017              Framework.
3018
3019       -XX:+TraceClassResolution
3020              Enables tracing of constant pool resolutions.  By default,  this
3021              option is disabled and constant pool resolutions aren't traced.
3022
3023              The   replacement  Unified  Logging  syntax  is  -Xlog:class+re‐
3024              solve=debug.  See Enable Logging with the  JVM  Unified  Logging
3025              Framework.
3026
3027       -XX:+TraceLoaderConstraints
3028              Enables  tracing  of  the  loader constraints recording.  By de‐
3029              fault, this option is disabled and loader constraints  recording
3030              isn't traced.
3031
3032              The  replacement  Unified  Logging  syntax  is -Xlog:class+load‐
3033              er+constraints=info.  See Enable Logging with  the  JVM  Unified
3034              Logging Framework.
3035
3036       For  the lists and descriptions of options removed in previous releases
3037       see the Removed Java Options section in:
3038
3039Java  Platform,  Standard  Edition  Tools   Reference,   Release   16
3040         [https://docs.oracle.com/en/java/javase/16/docs/specs/man/java.html]
3041
3042Java   Platform,   Standard   Edition  Tools  Reference,  Release  15
3043         [https://docs.oracle.com/en/java/javase/15/docs/specs/man/java.html]
3044
3045Java  Platform,  Standard  Edition  Tools   Reference,   Release   14
3046         [https://docs.oracle.com/en/java/javase/14/docs/specs/man/java.html]
3047
3048Java   Platform,   Standard   Edition  Tools  Reference,  Release  13
3049         [https://docs.oracle.com/en/java/javase/13/docs/specs/man/java.html]
3050
3051Java  Platform,  Standard  Edition  Tools   Reference,   Release   12
3052         [https://docs.oracle.com/en/java/javase/12/tools/ja
3053         va.html#GUID-3B1CE181-CD30-4178-9602-230B800D4FAE]
3054
3055Java  Platform,  Standard  Edition  Tools   Reference,   Release   11
3056         [https://docs.oracle.com/en/java/javase/11/tools/ja
3057         va.html#GUID-741FC470-AA3E-494A-8D2B-1B1FE4A990D1]
3058
3059Java  Platform,  Standard  Edition  Tools   Reference,   Release   10
3060         [https://docs.oracle.com/javase/10/tools/java.htm#JSWOR624]
3061
3062Java   Platform,   Standard   Edition   Tools  Reference,  Release  9
3063         [https://docs.oracle.com/javase/9/tools/java.htm#JSWOR624]
3064
3065Java Platform, Standard Edition Tools Reference, Release 8 for Oracle
3066         JDK     on    Windows    [https://docs.oracle.com/javase/8/docs/tech
3067         notes/tools/windows/java.html#BGBCIEFC]
3068
3069Java Platform, Standard Edition Tools Reference, Release 8 for Oracle
3070         JDK    on    Solaris,    Linux,    and    macOS    [https://docs.ora
3071         cle.com/javase/8/docs/technotes/tools/unix/java.html#BGBCIEFC]
3072

JAVA COMMAND-LINE ARGUMENT FILES

3074       You can shorten or simplify the java command by using @ argument  files
3075       to  specify  one or more text files that contain arguments, such as op‐
3076       tions and class names, which are passed  to  the  java  command.   This
3077       let's  you  to create java commands of any length on any operating sys‐
3078       tem.
3079
3080       In the command line, use the at sign (@) prefix to identify an argument
3081       file that contains java options and class names.  When the java command
3082       encounters a file beginning with the at sign (@), it expands  the  con‐
3083       tents  of  that file into an argument list just as they would be speci‐
3084       fied on the command line.
3085
3086       The java launcher expands the argument file contents until  it  encoun‐
3087       ters the --disable-@files option.  You can use the --disable-@files op‐
3088       tion anywhere on the command line, including in an  argument  file,  to
3089       stop @ argument files expansion.
3090
3091       The following items describe the syntax of java argument files:
3092
3093       • The argument file must contain only ASCII characters or characters in
3094         system default encoding that's ASCII friendly, such as UTF-8.
3095
3096       • The argument file size must not exceed MAXINT (2,147,483,647) bytes.
3097
3098       • The launcher doesn't expand wildcards that are present within an  ar‐
3099         gument file.
3100
3101       • Use white space or new line characters to separate arguments included
3102         in the file.
3103
3104       • White space includes a white space character, \t, \n, \r, and \f.
3105
3106         For example, it is possible to have a path  with  a  space,  such  as
3107         c:\Program Files  that can be specified as either "c:\\Program Files"
3108         or, to avoid an escape, c:\Program" "Files.
3109
3110       • Any option that contains spaces, such as a path  component,  must  be
3111         within  quotation  marks  using quotation ('"') characters in its en‐
3112         tirety.
3113
3114       • A string within quotation marks may contain the  characters  \n,  \r,
3115         \t, and \f.  They are converted to their respective ASCII codes.
3116
3117       • If a file name contains embedded spaces, then put the whole file name
3118         in double quotation marks.
3119
3120       • File names in an argument file are relative to the current directory,
3121         not to the location of the argument file.
3122
3123       • Use the number sign # in the argument file to identify comments.  All
3124         characters following the # are ignored until the end of line.
3125
3126       • Additional at sign @ prefixes to @ prefixed options act as an escape,
3127         (the  first  @ is removed and the rest of the arguments are presented
3128         to the launcher literally).
3129
3130       • Lines may be continued using the continuation character  (\)  at  the
3131         end-of-line.   The  two lines are concatenated with the leading white
3132         spaces trimmed.  To prevent trimming the leading white spaces, a con‐
3133         tinuation character (\) may be placed at the first column.
3134
3135       • Because  backslash  (\) is an escape character, a backslash character
3136         must be escaped with another backslash character.
3137
3138       • Partial quote is allowed and is closed by an end-of-file.
3139
3140       • An open quote stops at end-of-line unless \ is  the  last  character,
3141         which  then  joins  the next line by removing all leading white space
3142         characters.
3143
3144       • Wildcards (*) aren't allowed in these lists (such as specifying *.ja‐
3145         va).
3146
3147       • Use  of the at sign (@) to recursively interpret files isn't support‐
3148         ed.
3149
3150   Example of Open or Partial Quotes in an Argument File
3151       In the argument file,
3152
3153              -cp "lib/
3154              cool/
3155              app/
3156              jars
3157
3158       this is interpreted as:
3159
3160              -cp lib/cool/app/jars
3161
3162   Example of a Backslash Character Escaped with Another Backslash
3163       Character in an Argument File
3164
3165       To output the following:
3166
3167              -cp c:\Program Files (x86)\Java\jre\lib\ext;c:\Program Files\Ja‐
3168              va\jre9\lib\ext
3169
3170       The backslash character must be specified in the argument file as:
3171
3172              -cp "c:\\Program Files (x86)\\Java\\jre\\lib\\ext;c:\\Pro‐
3173              gram Files\\Java\\jre9\\lib\\ext"
3174
3175   Example of an EOL Escape Used to Force Concatenation of Lines in an
3176       Argument File
3177
3178       In the argument file,
3179
3180              -cp "/lib/cool app/jars:\
3181                  /lib/another app/jars"
3182
3183       This is interpreted as:
3184
3185              -cp /lib/cool app/jars:/lib/another app/jars
3186
3187   Example of Line Continuation with Leading Spaces in an Argument File
3188       In the argument file,
3189
3190              -cp "/lib/cool\
3191              \app/jars???
3192
3193       This is interpreted as:
3194
3195       -cp /lib/cool app/jars
3196
3197   Examples of Using Single Argument File
3198       You can use a single argument file, such as myargumentfile in the  fol‐
3199       lowing example, to hold all required java arguments:
3200
3201              java @myargumentfile
3202
3203   Examples of Using Argument Files with Paths
3204       You can include relative paths in argument files; however, they're rel‐
3205       ative to the current working directory and not to the paths of the  ar‐
3206       gument  files  themselves.  In the following example, path1/options and
3207       path2/options represent argument files with different paths.  Any rela‐
3208       tive paths that they contain are relative to the current working direc‐
3209       tory and not to the argument files:
3210
3211              java @path1/options @path2/classes
3212

CODE HEAP STATE ANALYTICS

3214   Overview
3215       There are occasions when having insight into the current state  of  the
3216       JVM code heap would be helpful to answer questions such as:
3217
3218       • Why was the JIT turned off and then on again and again?
3219
3220       • Where has all the code heap space gone?
3221
3222       • Why is the method sweeper not working effectively?
3223
3224       To  provide  this insight, a code heap state analytics feature has been
3225       implemented that enables on-the-fly analysis of the code heap.  The an‐
3226       alytics process is divided into two parts.  The first part examines the
3227       entire code heap and aggregates all information that is believed to  be
3228       useful  or  important.  The second part consists of several independent
3229       steps that print the collected information with an emphasis on  differ‐
3230       ent  aspects  of the data.  Data collection and printing are done on an
3231       "on request" basis.
3232
3233   Syntax
3234       Requests for real-time, on-the-fly analysis can be issued with the fol‐
3235       lowing command:
3236
3237              jcmd pid Compiler.CodeHeap_Analytics [function] [granularity]
3238
3239       If  you  are only interested in how the code heap looks like after run‐
3240       ning a sample workload, you can use the command line option:
3241
3242              -Xlog:codecache=Trace
3243
3244       To see the code heap state when a "CodeCache  full"  condition  exists,
3245       start the VM with the command line option:
3246
3247              -Xlog:codecache=Debug
3248
3249       See   CodeHeap   State  Analytics  (OpenJDK)  [https://bugs.openjdk.ja
3250       va.net/secure/attachment/75649/JVM_CodeHeap_StateAnalytics_V2.pdf]  for
3251       a  detailed  description  of the code heap state analytics feature, the
3252       supported functions, and the granularity options.
3253

ENABLE LOGGING WITH THE JVM UNIFIED LOGGING FRAMEWORK

3255       You use the -Xlog option to configure or enable logging with  the  Java
3256       Virtual Machine (JVM) unified logging framework.
3257
3258   Synopsis
3259              -Xlog[:[what][:[output][:[decorators][:output-options[,...]]]]]
3260
3261              -Xlog:directive
3262
3263       what   Specifies   a  combination  of  tags  and  levels  of  the  form
3264              tag1[+tag2...][*][=level][,...].  Unless  the  wildcard  (*)  is
3265              specified, only log messages tagged with exactly the tags speci‐
3266              fied are matched.  See -Xlog Tags and Levels.
3267
3268       output Sets the type of output.  Omitting the output type  defaults  to
3269              stdout.  See -Xlog Output.
3270
3271       decorators
3272              Configures  the output to use a custom set of decorators.  Omit‐
3273              ting decorators defaults to uptime, level, and tags.  See  Deco‐
3274              rations.
3275
3276       output-options
3277              Sets the -Xlog logging output options.
3278
3279       directive
3280              A global option or subcommand: help, disable, async
3281
3282   Description
3283       The  Java  Virtual  Machine  (JVM) unified logging framework provides a
3284       common logging system for all components of the JVM.   GC  logging  for
3285       the JVM has been changed to use the new logging framework.  The mapping
3286       of old GC flags to the corresponding  new  Xlog  configuration  is  de‐
3287       scribed in Convert GC Logging Flags to Xlog.  In addition, runtime log‐
3288       ging has also been changed to use the JVM  unified  logging  framework.
3289       The  mapping  of  legacy runtime logging flags to the corresponding new
3290       Xlog configuration is described in Convert  Runtime  Logging  Flags  to
3291       Xlog.
3292
3293       The  following provides quick reference to the -Xlog command and syntax
3294       for options:
3295
3296       -Xlog  Enables JVM logging on an info level.
3297
3298       -Xlog:help
3299              Prints -Xlog usage syntax and available tags, levels, and  deco‐
3300              rators along with example command lines with explanations.
3301
3302       -Xlog:disable
3303              Turns  off  all logging and clears all configuration of the log‐
3304              ging framework including the default configuration for  warnings
3305              and errors.
3306
3307       -Xlog[:option]
3308              Applies  multiple arguments in the order that they appear on the
3309              command line.  Multiple -Xlog  arguments  for  the  same  output
3310              override each other in their given order.
3311
3312              The option is set as:
3313
3314                     [tag-selection][:[output][:[decorators][:output-op‐
3315                     tions]]]
3316
3317              Omitting the tag-selection defaults to a tag-set of  all  and  a
3318              level of info.
3319
3320                     tag[+...] all
3321
3322              The  all tag is a meta tag consisting of all tag-sets available.
3323              The asterisk * in a tag set definition denotes  a  wildcard  tag
3324              match.   Matching with a wildcard selects all tag sets that con‐
3325              tain at least the specified tags.  Without  the  wildcard,  only
3326              exact matches of the specified tag sets are selected.
3327
3328              output-options is
3329
3330                     filecount=file-count  filesize=file size with optional K,
3331                     M or G suffix
3332
3333   Default Configuration
3334       When the -Xlog option and nothing else  is  specified  on  the  command
3335       line,  the  default  configuration  is used.  The default configuration
3336       logs all messages with a level that matches either warning or error re‐
3337       gardless of what tags the message is associated with.  The default con‐
3338       figuration is equivalent to entering the following on the command line:
3339
3340              -Xlog:all=warning:stdout:uptime,level,tags
3341
3342   Controlling Logging at Runtime
3343       Logging can also be controlled at run time through Diagnostic  Commands
3344       (with  the jcmd utility).  Everything that can be specified on the com‐
3345       mand line can also be specified dynamically with  the  VM.log  command.
3346       As the diagnostic commands are automatically exposed as MBeans, you can
3347       use JMX to change logging configuration at run time.
3348
3349   -Xlog Tags and Levels
3350       Each log message has a level and a tag set  associated  with  it.   The
3351       level of the message corresponds to its details, and the tag set corre‐
3352       sponds to what the message contains or which JVM component it  involves
3353       (such  as, gc, jit, or os).  Mapping GC flags to the Xlog configuration
3354       is described in Convert GC Logging Flags to Xlog.  Mapping legacy  run‐
3355       time logging flags to the corresponding Xlog configuration is described
3356       in Convert Runtime Logging Flags to Xlog.
3357
3358       Available log levels:
3359
3360off
3361
3362trace
3363
3364debug
3365
3366info
3367
3368warning
3369
3370error
3371
3372       Available log tags:
3373
3374       There are literally dozens of log tags, which  in  the  right  combina‐
3375       tions,  will  enable a range of logging output.  The full set of avail‐
3376       able log tags can be seen using -Xlog:help.  Specifying all instead  of
3377       a tag combination matches all tag combinations.
3378
3379   -Xlog Output
3380       The -Xlog option supports the following types of outputs:
3381
3382stdout --- Sends output to stdout
3383
3384stderr --- Sends output to stderr
3385
3386file=filename --- Sends output to text file(s).
3387
3388       When  using file=filename, specifying %p and/or %t in the file name ex‐
3389       pands to the JVM's PID and startup timestamp,  respectively.   You  can
3390       also  configure  text  files to handle file rotation based on file size
3391       and a number of files to rotate.  For example, to rotate the  log  file
3392       every  10  MB  and  keep 5 files in rotation, specify the options file‐
3393       size=10M, filecount=5.  The target size of the files  isn't  guaranteed
3394       to  be exact, it's just an approximate value.  Files are rotated by de‐
3395       fault with up to 5 rotated files of target size 20 MB,  unless  config‐
3396       ured  otherwise.   Specifying  filecount=0  means  that  the  log  file
3397       shouldn't be rotated.  There's a possibility of  the  pre-existing  log
3398       file getting overwritten.
3399
3400   -Xlog Output Mode
3401       By default logging messages are output synchronously - each log message
3402       is written to the designated output when the logging call is made.  But
3403       you can instead use asynchronous logging mode by specifying:
3404
3405       -Xlog:async
3406              Write all logging asynchronously.
3407
3408       In asynchronous logging mode, log sites enqueue all logging messages to
3409       an intermediate buffer and  a  standalone  thread  is  responsible  for
3410       flushing them to the corresponding outputs.  The intermediate buffer is
3411       bounded and on buffer exhaustion the enqueuing  message  is  discarded.
3412       Log entry write operations are guaranteed non-blocking.
3413
3414       The  option  -XX:AsyncLogBufferSize=N  specifies  the  memory budget in
3415       bytes for the intermediate buffer.  The default  value  should  be  big
3416       enough  to  cater  for most cases.  Users can provide a custom value to
3417       trade memory overhead for log accuracy if they need to.
3418
3419   Decorations
3420       Logging messages are decorated with information about the message.  You
3421       can configure each output to use a custom set of decorators.  The order
3422       of the output is always the same as listed in the table.  You can  con‐
3423       figure  the  decorations  to  be  used  at  run  time.  Decorations are
3424       prepended to the log message.  For example:
3425
3426              [6.567s][info][gc,old] Old collection complete
3427
3428       Omitting decorators defaults to uptime, level, and tags.  The none dec‐
3429       orator is special and is used to turn off all decorations.
3430
3431       time  (t),  utctime  (utc),  uptime  (u), timemillis (tm), uptimemillis
3432       (um), timenanos (tn), uptimenanos (un), hostname  (hn),  pid  (p),  tid
3433       (ti), level (l), tags (tg) decorators can also be specified as none for
3434       no decoration.
3435
3436       Decorations       Description
3437       ──────────────────────────────────────────────────────────────────────────
3438       time or t         Current time and date in ISO-8601 format.
3439       utctime or utc    Universal Time  Coordinated  or  Coordinated  Universal
3440                         Time.
3441       uptime or u       Time  since  the  start  of the JVM in seconds and mil‐
3442                         liseconds.  For example, 6.567s.
3443       timemillis   or   The  same  value as generated by System.currentTimeMil‐
3444       tm                lis()
3445       uptimemillis or   Milliseconds since the JVM started.
3446       um
3447       timenanos or tn   The same value generated by System.nanoTime().
3448       uptimenanos  or   Nanoseconds since the JVM started.
3449       un
3450       hostname or hn    The host name.
3451       pid or p          The process identifier.
3452       tid or ti         The thread identifier.
3453       level or l        The level associated with the log message.
3454       tags or tg        The tag-set associated with the log message.
3455
3456   Convert GC Logging Flags to Xlog
3457       Legacy Garbage Collec‐   Xlog  Configura‐             Comment
3458       tion (GC) Flag           tion
3459       ───────────────────────────────────────────────────────────────────────────────────────
3460       G1PrintHeapRegions       -Xlog:gc+re‐                 Not Applicable
3461                                gion=trace
3462       GCLogFileSize            No configuration             Log rotation is handled by  the
3463                                available                    framework.
3464       NumberOfGCLogFiles       Not Applicable               Log  rotation is handled by the
3465                                                             framework.
3466       PrintAdaptiveSizePoli‐   -Xlog:gc+er‐                 Use a level of debug  for  most
3467       cy                       go*=level                    of  the information, or a level
3468                                                             of trace for all  of  what  was
3469                                                             logged    for    PrintAdaptive‐
3470                                                             SizePolicy.
3471       PrintGC                  -Xlog:gc                     Not Applicable
3472       PrintGCApplicationCon‐   -Xlog:safepoint              Note  that  PrintGCApplication‐
3473       currentTime                                           ConcurrentTime  and  PrintGCAp‐
3474                                                             plicationStoppedTime are logged
3475                                                             on the same tag and aren't sep‐
3476                                                             arated in the new logging.
3477       PrintGCApplication‐      -Xlog:safepoint              Note  that  PrintGCApplication‐
3478       StoppedTime                                           ConcurrentTime  and  PrintGCAp‐
3479                                                             plicationStoppedTime are logged
3480                                                             on  the  same tag and not sepa‐
3481                                                             rated in the new logging.
3482       PrintGCCause             Not Applicable               GC cause is now always logged.
3483       PrintGCDateStamps        Not Applicable               Date stamps are logged  by  the
3484                                                             framework.
3485       PrintGCDetails           -Xlog:gc*                    Not Applicable
3486       PrintGCID                Not Applicable               GC ID is now always logged.
3487       PrintGCTaskTimeStamps    -Xlog:gc+task*=de‐           Not Applicable
3488                                bug
3489       PrintGCTimeStamps        Not Applicable               Time stamps are logged  by  the
3490                                                             framework.
3491       PrintHeapAtGC            -Xlog:gc+heap=trace          Not Applicable
3492       PrintReferenceGC         -Xlog:gc+ref*=debug          Note that in the  old  logging,
3493                                                             PrintReferenceGC  had an effect
3494                                                             only if PrintGCDetails was also
3495                                                             enabled.
3496       PrintStringDeduplica‐    `-Xlog:gc+stringdedup*=de‐   ` Not Applicable
3497       tionStatistics           bug
3498       PrintTenuringDistribu‐   -Xlog:gc+age*=level          Use a level of  debug  for  the
3499       tion                                                  most relevant information, or a
3500                                                             level of trace for all of  what
3501                                                             was   logged   for  PrintTenur‐
3502                                                             ingDistribution.
3503       UseGCLogFileRotation     Not Applicable               What was logged for PrintTenur‐
3504                                                             ingDistribution.
3505
3506   Convert Runtime Logging Flags to Xlog
3507       These  legacy flags are no longer recognized and will cause an error if
3508       used directly.  Use their unified logging equivalent instead.
3509
3510       Legacy  Runtime   Xlog Configuration      Comment
3511       Flag
3512       ──────────────────────────────────────────────────────────────────────────────
3513       TraceExceptions   -Xlog:exceptions=in‐    Not Applicable
3514                         fo
3515       TraceClassLoad‐   -Xlog:class+load=lev‐   Use level=info for regular informa‐
3516       ing               el                      tion, or level=debug for additional
3517                                                 information.   In  Unified  Logging
3518                                                 syntax,    -verbose:class    equals
3519                                                 -Xlog:class+load=info,class+un‐
3520                                                 load=info.
3521       TraceClassLoad‐   -Xlog:class+pre‐        Not Applicable
3522       ingPreorder       order=debug
3523       TraceClassUn‐     -Xlog:class+un‐         Use level=info for regular informa‐
3524       loading           load=level              tion, or level=trace for additional
3525                                                 information.   In  Unified  Logging
3526                                                 syntax,    -verbose:class    equals
3527                                                 -Xlog:class+load=info,class+un‐
3528                                                 load=info.
3529       VerboseVerifi‐    -Xlog:verifica‐         Not Applicable
3530       cation            tion=info
3531       TraceClassPaths   -Xlog:class+path=info   Not Applicable
3532       TraceClassReso‐   -Xlog:class+re‐         Not Applicable
3533       lution            solve=debug
3534       TraceClassIni‐    -Xlog:class+init=info   Not Applicable
3535       tialization
3536       TraceLoaderCon‐   -Xlog:class+load‐       Not Applicable
3537       straints          er+constraints=info
3538       TraceClassLoad‐   -Xlog:class+load‐       Use  level=debug for regular infor‐
3539       erData            er+data=level           mation or level=trace for addition‐
3540                                                 al information.
3541       TraceSafepoint‐   -Xlog:safe‐             Not Applicable
3542       CleanupTime       point+cleanup=info
3543       TraceSafepoint    -Xlog:safepoint=debug   Not Applicable
3544       TraceMonitorIn‐   -Xlog:monitorinfla‐     Not Applicable
3545       flation           tion=debug
3546       TraceBiased‐      -Xlog:biasedlock‐       Use level=info for regular informa‐
3547       Locking           ing=level               tion, or level=trace for additional
3548                                                 information.
3549       TraceRede‐        -Xlog:rede‐             level=info,  debug,  and trace pro‐
3550       fineClasses       fine+class*=level       vide increasing amounts of informa‐
3551                                                 tion.
3552
3553   -Xlog Usage Examples
3554       The following are -Xlog examples.
3555
3556       -Xlog  Logs all messages by using the info level to stdout with uptime,
3557              levels, and tags decorations.  This is equivalent to using:
3558
3559                     -Xlog:all=info:stdout:uptime,levels,tags
3560
3561       -Xlog:gc
3562              Logs messages tagged with the gc tag using info level to stdout.
3563              The  default configuration for all other messages at level warn‐
3564              ing is in effect.
3565
3566       -Xlog:gc,safepoint
3567              Logs messages tagged either with the gc or safepoint tags,  both
3568              using the info level, to stdout, with default decorations.  Mes‐
3569              sages tagged with both gc and safepoint won't be logged.
3570
3571       -Xlog:gc+ref=debug
3572              Logs messages tagged with both gc and ref tags, using the  debug
3573              level to stdout, with default decorations.  Messages tagged only
3574              with one of the two tags won't be logged.
3575
3576       -Xlog:gc=debug:file=gc.txt:none
3577              Logs messages tagged with the gc tag using the debug level to  a
3578              file  called gc.txt with no decorations.  The default configura‐
3579              tion for all other messages at level warning is still in effect.
3580
3581       -Xlog:gc=trace:file=gctrace.txt:uptimemillis,pids:filecount=5,file‐
3582       size=1024
3583              Logs  messages tagged with the gc tag using the trace level to a
3584              rotating file set with 5 files with size 1 MB with the base name
3585              gctrace.txt and uses decorations uptimemillis and pid.
3586
3587              The  default configuration for all other messages at level warn‐
3588              ing is still in effect.
3589
3590       -Xlog:gc::uptime,tid
3591              Logs messages tagged with the gc tag using  the  default  'info'
3592              level  to  default the output stdout and uses decorations uptime
3593              and tid.  The default configuration for all  other  messages  at
3594              level warning is still in effect.
3595
3596       -Xlog:gc*=info,safepoint*=off
3597              Logs  messages tagged with at least gc using the info level, but
3598              turns off logging of messages tagged with  safepoint.   Messages
3599              tagged with both gc and safepoint won't be logged.
3600
3601       -Xlog:disable -Xlog:safepoint=trace:safepointtrace.txt
3602              Turns  off  all logging, including warnings and errors, and then
3603              enables messages tagged with safepointusing  tracelevel  to  the
3604              file  safepointtrace.txt.  The default configuration doesn't ap‐
3605              ply, because the command line started with -Xlog:disable.
3606
3607   Complex -Xlog Usage Examples
3608       The following describes a few complex examples of using the  -Xlog  op‐
3609       tion.
3610
3611       -Xlog:gc+class*=debug
3612              Logs  messages  tagged with at least gc and class tags using the
3613              debug level to stdout.  The default configuration for all  other
3614              messages at the level warning is still in effect
3615
3616       -Xlog:gc+meta*=trace,class*=off:file=gcmetatrace.txt
3617              Logs  messages  tagged  with at least the gc and meta tags using
3618              the trace level to the file metatrace.txt but turns off all mes‐
3619              sages  tagged  with  class.   Messages tagged with gc, meta, and
3620              class aren't be logged as class* is set  to  off.   The  default
3621              configuration  for all other messages at level warning is in ef‐
3622              fect except for those that include class.
3623
3624       -Xlog:gc+meta=trace
3625              Logs messages tagged with exactly the gc and meta tags using the
3626              trace  level to stdout.  The default configuration for all other
3627              messages at level warning is still be in effect.
3628
3629       -Xlog:gc+class+heap*=debug,meta*=warning,threads*=off
3630              Logs messages tagged with at least gc, class, and heap tags  us‐
3631              ing  the trace level to stdout but only log messages tagged with
3632              meta with level.  The default configuration for all  other  mes‐
3633              sages  at  the  level warning is in effect except for those that
3634              include threads.
3635

VALIDATE JAVA VIRTUAL MACHINE FLAG ARGUMENTS

3637       You use values provided to all Java Virtual Machine (JVM)  command-line
3638       flags   for   validation   and,  if  the  input  value  is  invalid  or
3639       out-of-range, then an appropriate error message is displayed.
3640
3641       Whether they're set ergonomically, in a command line, by an input tool,
3642       or  through the APIs (for example, classes contained in the package ja‐
3643       va.lang.management) the values provided to  all  Java  Virtual  Machine
3644       (JVM)  command-line  flags  are validated.  Ergonomics are described in
3645       Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collec‐
3646       tion Tuning Guide.
3647
3648       Range  and  constraints  are validated either when all flags have their
3649       values set during JVM initialization or a flag's value is changed  dur‐
3650       ing  runtime  (for example using the jcmd tool).  The JVM is terminated
3651       if a value violates either the range or constraint check and an  appro‐
3652       priate error message is printed on the error stream.
3653
3654       For example, if a flag violates a range or a constraint check, then the
3655       JVM exits with an error:
3656
3657              java -XX:AllocatePrefetchStyle=5 -version
3658              intx AllocatePrefetchStyle=5 is outside the allowed range [ 0 ... 3 ]
3659              Improperly specified VM option 'AllocatePrefetchStyle=5'
3660              Error: Could not create the Java Virtual Machine.
3661              Error: A fatal exception has occurred. Program will exit.
3662
3663       The flag -XX:+PrintFlagsRanges prints the range of all the flags.  This
3664       flag  allows  automatic  testing of the flags by the values provided by
3665       the ranges.  For the flags that have the ranges  specified,  the  type,
3666       name, and the actual range is printed in the output.
3667
3668       For example,
3669
3670              intx   ThreadStackSize [ 0 ... 9007199254740987 ] {pd product}
3671
3672       For  the  flags  that don't have the range specified, the values aren't
3673       displayed in the print out.  For example:
3674
3675              size_t NewSize         [   ...                  ] {product}
3676
3677       This helps to identify the flags that need to be implemented.  The  au‐
3678       tomatic  testing  framework can skip those flags that don't have values
3679       and aren't implemented.
3680

LARGE PAGES

3682       You use large pages, also known as huge pages, as memory pages that are
3683       significantly  larger  than the standard memory page size (which varies
3684       depending on the processor and operating system).  Large pages optimize
3685       processor Translation-Lookaside Buffers.
3686
3687       A  Translation-Lookaside  Buffer (TLB) is a page translation cache that
3688       holds the most-recently used virtual-to-physical address  translations.
3689       A  TLB  is  a scarce system resource.  A TLB miss can be costly because
3690       the processor must then read from the hierarchical  page  table,  which
3691       may  require  multiple  memory accesses.  By using a larger memory page
3692       size, a single TLB entry can represent a larger memory range.  This re‐
3693       sults  in less pressure on a TLB, and memory-intensive applications may
3694       have better performance.
3695
3696       However, using large pages can negatively  affect  system  performance.
3697       For example, when a large amount of memory is pinned by an application,
3698       it may create a shortage of regular memory and cause  excessive  paging
3699       in  other applications and slow down the entire system.  Also, a system
3700       that has been up for a long time could produce excessive fragmentation,
3701       which  could  make  it  impossible to reserve enough large page memory.
3702       When this happens, either the OS or JVM reverts to using regular pages.
3703
3704       Linux and Windows support large pages.
3705
3706   Large Pages Support for Linux
3707       Linux supports large pages since version 2.6.  To check if  your  envi‐
3708       ronment supports large pages, try the following:
3709
3710              # cat /proc/meminfo | grep Huge
3711              HugePages_Total: 0
3712              HugePages_Free: 0
3713              ...
3714              Hugepagesize: 2048 kB
3715
3716       If  the  output  contains  items prefixed with "Huge", then your system
3717       supports large pages.  The values may vary  depending  on  environment.
3718       The  Hugepagesize field shows the default large page size in your envi‐
3719       ronment, and the other fields show details  for  large  pages  of  this
3720       size.   Newer  kernels  have support for multiple large page sizes.  To
3721       list the supported page sizes, run this:
3722
3723              # ls /sys/kernel/mm/hugepages/
3724              hugepages-1048576kB  hugepages-2048kB
3725
3726       The above environment supports 2 MB and 1 GB large pages, but they need
3727       to  be configured so that the JVM can use them.  When using large pages
3728       and not enabling transparent  huge  pages  (option  -XX:+UseTransparen‐
3729       tHugePages),  the number of large pages must be pre-allocated.  For ex‐
3730       ample, to enable 8 GB of memory to be backed by 2 MB large pages, login
3731       as root and run:
3732
3733              # echo 4096 > /sys/ker‐
3734              nel/mm/hugepages/hugepages-2048kB/nr_hugepages
3735
3736       It is always recommended to check the value of nr_hugepages  after  the
3737       request to make sure the kernel was able to allocate the requested num‐
3738       ber of large pages.
3739
3740       When using the option -XX:+UseSHM to enable large pages you  also  need
3741       to  make  sure the SHMMAX parameter is configured to allow large enough
3742       shared memory segments to be allocated.  To allow a maximum shared seg‐
3743       ment of 8 GB, login as root and run:
3744
3745              # echo 8589934592 > /proc/sys/kernel/shmmax
3746
3747       In  some  environments  this  is  not needed since the default value is
3748       large enough, but it is important to  make  sure  the  value  is  large
3749       enough  to  fit  the  amount  of  memory intended to be backed by large
3750       pages.
3751
3752              Note: The values contained in /proc and /sys reset after you re‐
3753              boot  your  system, so may want to set them in an initialization
3754              script (for example, rc.local or sysctl.conf).
3755
3756       If you configure the OS kernel parameters to enable use of large pages,
3757       the  Java  processes may allocate large pages for the Java heap as well
3758       as other internal areas, for example:
3759
3760       • Code cache
3761
3762       • Marking bitmaps
3763
3764       Consequently, if you configure the nr_hugepages parameter to  the  size
3765       of  the Java heap, then the JVM can still fail to allocate the heap us‐
3766       ing large pages because other areas such as the code  cache  might  al‐
3767       ready have used some of the configured large pages.
3768
3769   Large Pages Support for Windows
3770       To use large pages support on Windows, the administrator must first as‐
3771       sign additional privileges to the user who is running the application:
3772
3773       1. Select Control Panel, Administrative Tools, and then Local  Security
3774          Policy.
3775
3776       2. Select Local Policies and then User Rights Assignment.
3777
3778       3. Double-click Lock pages in memory, then add users and/or groups.
3779
3780       4. Reboot your system.
3781
3782       Note that these steps are required even if it's the administrator who's
3783       running the application, because administrators by default  don't  have
3784       the privilege to lock pages in memory.
3785

APPLICATION CLASS DATA SHARING

3787       Application  Class  Data  Sharing  (AppCDS)  extends class data sharing
3788       (CDS) to enable application classes to be placed in a shared archive.
3789
3790       In addition to the core library classes,  AppCDS  supports  Class  Data
3791       Sharing  [https://docs.oracle.com/en/java/javase/12/vm/class-data-shar
3792       ing.html#GUID-7EAA3411-8CF0-4D19-BD05-DF5E1780AA91] from the  following
3793       locations:
3794
3795       • Platform classes from the runtime image
3796
3797       • Application classes from the runtime image
3798
3799       • Application classes from the class path
3800
3801       • Application classes from the module path
3802
3803       Archiving application classes provides better start up time at runtime.
3804       When running multiple JVM processes, AppCDS also  reduces  the  runtime
3805       footprint with memory sharing for read-only metadata.
3806
3807       CDS/AppCDS supports archiving classes from JAR files only.
3808
3809       Prior to JDK 11, a non-empty directory was reported as a fatal error in
3810       the following conditions:
3811
3812       • For base CDS, a non-empty directory cannot exist in the  -Xbootclass‐
3813         path/a path
3814
3815       • With  -XX:+UseAppCDS,  a  non-empty  directory could not exist in the
3816         -Xbootclasspath/a path, class path, and module path.
3817
3818       In JDK 11 and later, -XX:+UseAppCDS is obsolete and the behavior for  a
3819       non-empty  directory  is  based on the class types in the classlist.  A
3820       non-empty directory is reported as a fatal error in the following  con‐
3821       ditions:
3822
3823       • If  application classes or platform classes are not loaded, dump time
3824         only reports an error if a non-empty directory exists in -Xbootclass‐
3825         path/a path
3826
3827       • If  application classes or platform classes are loaded, dump time re‐
3828         ports an error for a non-empty directory that exists in  -Xbootclass‐
3829         path/a path, class path, or module path
3830
3831       In  JDK 11 and later, using -XX:DumpLoadedClassList=class_list_file re‐
3832       sults a generated classlist  with  all  classes  (both  system  library
3833       classes and application classes) included.  You no longer have to spec‐
3834       ify -XX:+UseAppCDS with -XX:DumpLoadedClassList to produce  a  complete
3835       class list.
3836
3837       In  JDK  11 and later, because UseAppCDS is obsolete, SharedArchiveFile
3838       becomes a product flag by default.   Specifying  +UnlockDiagnosticVMOp‐
3839       tions for SharedArchiveFile is no longer needed in any configuration.
3840
3841       Class Data Sharing (CDS)/AppCDS does not support archiving array class‐
3842       es in a class list.  When an array in the class  list  is  encountered,
3843       CDS dump time gives the explicit error message:
3844
3845              Preload Warning: Cannot find array_name
3846
3847       Although  an array in the class list is not allowed, some array classes
3848       can still be created at CDS/AppCDS dump time.  Those arrays are created
3849       during  the  execution  of the Java code used by the Java class loaders
3850       (PlatformClassLoader and the system class loader) to  load  classes  at
3851       dump time.  The created arrays are archived with the rest of the loaded
3852       classes.
3853
3854   Extending Class Data Sharing to Support the Module Path
3855       In JDK 11, Class Data Sharing (CDS) has been improved  to  support  ar‐
3856       chiving classes from the module path.
3857
3858       • To  create  a  CDS archive using the --module-path VM option, use the
3859         following command line syntax:
3860
3861                java -Xshare:dump -XX:SharedClassListFile=class_list_file
3862                -XX:SharedArchiveFile=shared_archive_file               --mod‐
3863                ule-path=path_to_modular_jar -m module_name
3864
3865       • To run with a CDS archive using the --module-path VM option, use  the
3866         following the command line syntax:
3867
3868                java -XX:SharedArchiveFile=shared_archive_file          --mod‐
3869                ule-path=path_to_modular_jar -m module_name
3870
3871       The following table describes how the  VM  options  related  to  module
3872       paths can be used along with the -Xshare option.
3873
3874       Option                -Xshare:dump          -Xshare:{on,auto}
3875       ────────────────────────────────────────────────────────────────
3876       --module-path[1] mp   Allowed               Allowed[2]
3877       --module              Allowed               Allowed
3878       --add-module          Allowed               Allowed
3879       --upgrade-mod‐        Disallowed   (exits   Allowed   (disables
3880       ule-path[3]           if specified)         CDS)
3881       --patch-module[4]     Disallowed   (exits   Allowed   (disables
3882                             if specified)         CDS)
3883       --limit-modules[5]    Disallowed   (exits   Allowed   (disables
3884                             if specified)         CDS)
3885
3886       [1] Although there are two ways of specifying  a  module  in  a  --mod‐
3887       ule-path,  that  is,  modular JAR or exploded module, only modular JARs
3888       are supported.
3889
3890       [2] Different mp can be specified during dump time versus run time.  If
3891       an  archived  class K was loaded from mp1.jar at dump time, but changes
3892       in mp cause it to be available from a different mp2.jar  at  run  time,
3893       then  the archived version of K will be disregarded at run time; K will
3894       be loaded dynamically.
3895
3896       [3] Currently, only two system modules are  upgradeable  (java.compiler
3897       and  jdk.internal.vm.compiler).   However, these modules are seldom up‐
3898       graded in production software.
3899
3900       [4] As documented in JEP 261, using --patch-module is strongly discour‐
3901       aged for production use.
3902
3903       [5]  --limit-modules  is  intended  for testing purposes.  It is seldom
3904       used in production software.
3905
3906       If --upgrade-module-path, --patch-module, or --limit-modules is  speci‐
3907       fied at dump time, an error will be printed and the JVM will exit.  For
3908       example, if the --limit-modules option is specified at dump  time,  the
3909       user will see the following error:
3910
3911              Error occurred during initialization of VM
3912              Cannot use the following option when dumping the shared archive: --limit-modules
3913
3914       If  --upgrade-module-path, --patch-module, or --limit-modules is speci‐
3915       fied at run time, a warning message will be printed indicating that CDS
3916       is  disabled.  For example, if the --limit-modules options is specified
3917       at run time, the user will see the following warning:
3918
3919              Java HotSpot(TM) 64-Bit Server VM warning: CDS is disabled when the --limit-modules option is specified.
3920
3921       Several other noteworthy things include:
3922
3923       • Any valid combinations of -cp and --module-path are supported.
3924
3925       • A non-empty directory in the module path causes a fatal  error.   The
3926         user will see the following error messages:
3927
3928                Error: non-empty directory <directory> Hint: enable -Xlog:class+path=info to diagnose the failure Error occurred during initialization of VM Cannot have non-empty directory in paths
3929
3930       • Unlike the class path, there's no restriction that the module path at
3931         dump time must be equal to or be a prefix of the module path  at  run
3932         time.
3933
3934       • The  archive  is invalidated if an existing JAR in the module path is
3935         updated after archive generation.
3936
3937       • Removing a JAR from the module path does not  invalidate  the  shared
3938         archive.   Archived classes from the removed JAR are not used at run‐
3939         time.
3940
3941   Dynamic CDS archive
3942       Dynamic CDS archive extends AppCDS to allow archiving of classes when a
3943       Java  application exits.  It improves the usability of AppCDS by elimi‐
3944       nating the trial run step for creating a class list for  each  applica‐
3945       tion.   The archived classes include all loaded application classes and
3946       library classes that are not present in the default CDS  archive  which
3947       is included in the JDK.
3948
3949       A  base  archive  is  required when creating a dynamic archive.  If the
3950       base archive is not specified, the default CDS archive is used  as  the
3951       base archive.
3952
3953       To  create  a  dynamic  CDS archive with the default CDS archive as the
3954       base archive, just add  the  -XX:ArchiveClassesAtExit=<dynamic archive>
3955       option to the command line for running the Java application.
3956
3957       If  the  default  CDS archive does not exist, the VM will exit with the
3958       following error:
3959
3960              ArchiveClassesAtExit not supported when base CDS archive is not loaded
3961
3962       To run the Java application using a dynamic CDS archive, just  add  the
3963       -XX:SharedArchiveFile=<dynamic archive>  option to the command line for
3964       running the Java application.
3965
3966       The base archive is not required to be specified in the  command  line.
3967       The base archive information, including its name and full path, will be
3968       retrieved from the dynamic archive header.  Note that  the  user  could
3969       also  use the -XX:SharedArchiveFile option for specifying a regular Ap‐
3970       pCDS   archive.    Therefore,   the   specified    archive    in    the
3971       -XX:SharedArchiveFile  option  could be either a regular or dynamic ar‐
3972       chive.  During VM start up the specified archive header will  be  read.
3973       If -XX:SharedArchiveFile refers to a regular archive, then the behavior
3974       will be unchanged.  If -XX:SharedArchiveFile refers to  a  dynamic  ar‐
3975       chive,  the VM will retrieve the base archive location from the dynamic
3976       archive.  If the dynamic archive was created with the default  CDS  ar‐
3977       chive,  then  the current default CDS archive will be used, and will be
3978       found relative to the current run time environment.
3979
3980       Please     refer     to      JDK-8221706      [https://bugs.openjdk.ja
3981       va.net/browse/JDK-8221706] for details on error checking during dynamic
3982       CDS archive dump time and run time.
3983
3984   Creating a Shared Archive File and Using It to Run an Application
3985   AppCDS archive
3986       The following steps create a shared archive file that contains all  the
3987       classes used by the test.Hello application.  The last step runs the ap‐
3988       plication with the shared archive file.
3989
3990       1. Create a list of all classes used  by  the  test.Hello  application.
3991          The following command creates a file named hello.classlist that con‐
3992          tains a list of all classes used by this application:
3993
3994                  java -Xshare:off -XX:DumpLoadedClassList=hel‐
3995                  lo.classlist -cp hello.jar test.Hello
3996
3997           Note that the classpath specified by the -cp parameter must contain
3998           only JAR files.
3999
4000       2. Create a shared archive, named  hello.jsa,  that  contains  all  the
4001          classes in hello.classlist:
4002
4003                  java -Xshare:dump -XX:SharedArchiveFile=hel‐
4004                  lo.jsa -XX:SharedClassListFile=hello.classlist -cp hello.jar
4005
4006           Note that the classpath used at archive creation time must  be  the
4007           same as (or a prefix of) the classpath used at run time.
4008
4009       3. Run the application test.Hello with the shared archive hello.jsa:
4010
4011                  java -XX:SharedArchiveFile=hello.jsa -cp hello.jar test.Hel‐
4012                  lo
4013
4014       4. Optional Verify that the test.Hello application is using  the  class
4015          contained in the hello.jsa shared archive:
4016
4017                  java -XX:SharedArchiveFile=hello.jsa -cp hello.jar -ver‐
4018                  bose:class test.Hello
4019
4020           The output of this command should contain the following text:
4021
4022                  Loaded test.Hello from shared objects file by sun/misc/Launcher$AppClassLoader
4023
4024   Dynamic CDS archive
4025       The following steps create a dynamic CDS archive file that contains the
4026       classes  used by the test.Hello application and are not included in the
4027       default CDS archive.  The second step runs the application with the dy‐
4028       namic CDS archive.
4029
4030       1. Create a dynamic CDS archive, named hello.jsa, that contains all the
4031          classes in hello.jar loaded by the application test.Hello:
4032
4033                  java -XX:ArchiveClassesAtExit=hello.jsa -cp hello.jar Hello
4034
4035           Note that the classpath used at archive creation time must  be  the
4036           same as (or a prefix of) the classpath used at run time.
4037
4038       2. Run the application test.Hello with the shared archive hello.jsa:
4039
4040                  java -XX:SharedArchiveFile=hello.jsa -cp hello.jar test.Hel‐
4041                  lo
4042
4043       3. Optional Repeat step 4 of the previous section to  verify  that  the
4044          test.Hello application is using the class contained in the hello.jsa
4045          shared archive.
4046
4047       To automate the above steps 1 and 2, one can write a script such as the
4048       following:
4049
4050                  ARCHIVE=hello.jsa
4051                  if test -f $ARCHIVE; then
4052                      FLAG="-XX:SharedArchiveFile=$ARCHIVE"
4053                  else
4054                      FLAG="-XX:ArchiveClassesAtExit=$ARCHIVE"
4055                  fi
4056                  $JAVA_HOME/bin/java -cp hello.jar $FLAG test.Hello
4057
4058       Like an AppCDS archive, the archive needs to be re-generated if the Ja‐
4059       va version has changed.  The above script could be adjusted to  account
4060       for the Java version as follows:
4061
4062                  ARCHIVE=hello.jsa
4063                  VERSION=foo.version
4064                  if test -f $ARCHIVE -a -f $VERSION && cmp -s $VERSION $JAVA_HOME/release; then
4065                      FLAG="-XX:SharedArchiveFile=$ARCHIVE"
4066                  else
4067                      FLAG="-XX:ArchiveClassesAtExit=$ARCHIVE"
4068                      cp -f $JAVA_HOME/release $VERSION
4069                  fi
4070                  $JAVA_HOME/bin/java -cp hello.jar $FLAG test.Hello
4071
4072       Currently,  we  don't support concurrent dumping operations to the same
4073       CDS archive.  Care should be taken to avoid  multiple  writers  to  the
4074       same CDS archive.
4075
4076       The  user  could also create a dynamic CDS archive with a specific base
4077       archive, e.g.  named as base.jsa as follows:
4078
4079              java -XX:SharedArchiveFile=base.jsa -XX:ArchiveClassesAtEx‐
4080              it=hello.jsa -cp hello.jar Hello
4081
4082       To  run  the  application using the dynamic CDS archive hello.jsa and a
4083       specific base CDS archive base.jsa:
4084
4085              java -XX:SharedArchiveFile=base.jsa:hello.jsa -cp hello.jar Hel‐
4086              lo
4087
4088       Note  that  on  Windows,  the above path delimiter : should be replaced
4089       with ;.
4090
4091       The above command for specifying a base archive is useful if  the  base
4092       archive  used for creating the dynamic archive has been moved.  Normal‐
4093       ly, just specifying the dynamic archive should be sufficient since  the
4094       base archive info can be retrieved from the dynamic archive header.
4095
4096   Sharing a Shared Archive Across Multiple Application Processes
4097       You  can  share the same archive file across multiple applications pro‐
4098       cesses.  This reduces memory usage because the archive is memory-mapped
4099       into the address space of the processes.  The operating system automat‐
4100       ically shares the read-only pages across these processes.
4101
4102       The following steps demonstrate how to create a common archive that can
4103       be  shared  by  different  applications.  Classes from common.jar, hel‐
4104       lo.jar and hi.jar are archived in the common.jsa because they  are  all
4105       in the classpath during the archiving step (step 3).
4106
4107       To  include  classes  from hello.jar and hi.jar, the .jar files must be
4108       added to the classpath specified by the -cp parameter.
4109
4110       1. Create a list of all classes used by the Hello application  and  an‐
4111          other list for the Hi application:
4112
4113                  java -XX:DumpLoadedClassList=hello.classlist -cp com‐
4114                  mon.jar:hello.jar Hello
4115
4116                  java -XX:DumpLoadedClassList=hi.classlist -cp com‐
4117                  mon.jar:hi.jar Hi
4118
4119       2. Create  a  single  list of classes used by all the applications that
4120          will share the shared archive file.
4121
4122           Linux and macOS The  following  commands  combine  the  files  hel‐
4123           lo.classlist and hi.classlist into one file, common.classlist:
4124
4125                  cat hello.classlist hi.classlist > common.classlist
4126
4127           Windows  The  following  commands combine the files hello.classlist
4128           and hi.classlist into one file, common.classlist:
4129
4130                  type hello.classlist hi.classlist > common.classlist
4131
4132       3. Create a shared archive  named  common.jsa  that  contains  all  the
4133          classes in common.classlist:
4134
4135                  java -Xshare:dump -XX:SharedArchiveFile=com‐
4136                  mon.jsa -XX:SharedClassListFile=common.classlist -cp com‐
4137                  mon.jar:hello.jar:hi.jar
4138
4139           The classpath parameter used is the common class path prefix shared
4140           by the Hello and Hi applications.
4141
4142       4. Run the Hello and Hi applications with the same shared archive:
4143
4144                  java -XX:SharedArchiveFile=common.jsa -cp common.jar:hel‐
4145                  lo.jar:hi.jar Hello
4146
4147                  java -XX:SharedArchiveFile=common.jsa -cp common.jar:hel‐
4148                  lo.jar:hi.jar Hi
4149
4150   Specifying Additional Shared Data Added to an Archive File
4151       The SharedArchiveConfigFile option is used to specify additional shared
4152       data to add to the archive file.
4153
4154              -XX:SharedArchiveConfigFile=shared_config_file
4155
4156       JDK  9  and later supports adding both symbols and string objects to an
4157       archive for memory sharing when you have multiple JVM processes running
4158       on  the same host.  An example of this is having multiple JVM processes
4159       that use the same set of Java EE classes.  When  these  common  classes
4160       are  loaded  and used, new symbols and strings may be created and added
4161       to the JVM's internal "symbol" and "string" tables.   At  runtime,  the
4162       symbols  or  string  objects mapped from the archive file can be shared
4163       across multiple JVM processes, resulting in a reduction of overall mem‐
4164       ory  usage.  In addition, archiving strings also provides added perfor‐
4165       mance benefits in both startup time and runtime execution.
4166
4167       In JDK 10 and later, CONSTANT_String entries in  archived  classes  are
4168       resolved  to  interned  String  objects  at dump time, and all interned
4169       String objects are archived.  However, even though all  CONSTANT_String
4170       literals  in  all archived classes are resolved, it might still benefi‐
4171       cial to add additional strings that are not string  literals  in  class
4172       files, but are likely to be used by your application at run time.
4173
4174       Symbol data should be generated by the jcmd tool attaching to a running
4175       JVM process.  See jcmd.
4176
4177       The following is an example of the symbol dumping command in jcmd:
4178
4179              jcmd pid VM.symboltable -verbose
4180
4181              Note: The first line (process ID) and  the  second  line  (@VER‐
4182              SION ...)  of  this jcmd output should be excluded from the con‐
4183              figuration file.
4184
4185   Example of a Configuration File
4186       The following is an example of a configuration file:
4187
4188              VERSION: 1.0
4189              @SECTION: Symbol
4190              10 -1: linkMethod
4191
4192       In the configuration file example, the @SECTION: Symbol entry uses  the
4193       following format:
4194
4195              length refcount: symbol
4196
4197       The refcount for a shared symbol is always -1.
4198
4199       @SECTION  specifies  the type of the section that follows it.  All data
4200       within the section must be the same type that's specified by  @SECTION.
4201       Different  types  of data can't be mixed.  Multiple separated data sec‐
4202       tions for the same type specified by  different  @SECTION  are  allowed
4203       within one shared_config_file .
4204

PERFORMANCE TUNING EXAMPLES

4206       You  can  use the Java advanced runtime options to optimize the perfor‐
4207       mance of your applications.
4208
4209   Tuning for Higher Throughput
4210       Use the following commands  and  advanced  options  to  achieve  higher
4211       throughput performance for your application:
4212
4213              java -server -XX:+UseParallelGC -XX:+Use‐
4214              LargePages -Xmn10g  -Xms26g -Xmx26g
4215
4216   Tuning for Lower Response Time
4217       Use the following commands and advanced options to  achieve  lower  re‐
4218       sponse times for your application:
4219
4220              java -XX:+UseG1GC -XX:MaxGCPauseMillis=100
4221
4222   Keeping the Java Heap Small and Reducing the Dynamic Footprint of
4223       Embedded Applications
4224
4225       Use  the following advanced runtime options to keep the Java heap small
4226       and reduce the dynamic footprint of embedded applications:
4227
4228              -XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5
4229
4230              Note: The defaults for these two options are 70% and 40% respec‐
4231              tively.   Because  performance  sacrifices  can occur when using
4232              these small settings, you should optimize for a small  footprint
4233              by reducing these settings as much as possible without introduc‐
4234              ing unacceptable performance degradation.
4235

EXIT STATUS

4237       The following exit values are typically returned by the  launcher  when
4238       the launcher is called with the wrong arguments, serious errors, or ex‐
4239       ceptions thrown by the JVM.  However, a Java application may choose  to
4240       return  any  value  by  using the API call System.exit(exitValue).  The
4241       values are:
4242
42430: Successful completion
4244
4245>0: An error occurred
4246
4247
4248
4249JDK 17                               2021                              JAVA(1)
Impressum