1JAVA(1)                          JDK Commands                          JAVA(1)
2
3
4

NAME

6       java - launch a Java application
7

SYNOPSIS

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

DESCRIPTION

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

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

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

USING THE JDK_JAVA_OPTIONS LAUNCHER ENVIRONMENT VARIABLE

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

OVERVIEW OF JAVA OPTIONS

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

STANDARD OPTIONS FOR JAVA

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

EXTRA OPTIONS FOR JAVA

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

EXTRA OPTIONS FOR MACOS

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

ADVANCED OPTIONS FOR JAVA

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

ADVANCED RUNTIME OPTIONS FOR JAVA

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

ADVANCED JIT COMPILER OPTIONS FOR JAVA

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

ADVANCED SERVICEABILITY OPTIONS FOR JAVA

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

ADVANCED GARBAGE COLLECTION OPTIONS FOR JAVA

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

DEPRECATED JAVA OPTIONS

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

OBSOLETE JAVA OPTIONS

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

REMOVED JAVA OPTIONS

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

JAVA COMMAND-LINE ARGUMENT FILES

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

CODE HEAP STATE ANALYTICS

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

ENABLE LOGGING WITH THE JVM UNIFIED LOGGING FRAMEWORK

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

VALIDATE JAVA VIRTUAL MACHINE FLAG ARGUMENTS

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

LARGE PAGES

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

APPLICATION CLASS DATA SHARING

3786       Application Class Data Sharing (AppCDS) stores classes used by your ap‐
3787       plications in an archive file.  Since these classes  are  stored  in  a
3788       format that can be loaded very quickly (compared to classes stored in a
3789       JAR file), AppCDS can improve the start-up time of  your  applications.
3790       In  addition, AppCDS can reduce the runtime memory footprint by sharing
3791       parts of these classes across multiple processes.
3792
3793       Classes in the CDS archive are stored in  an  optimized  format  that's
3794       about  2  to 5 times larger than classes stored in JAR files or the JDK
3795       runtime image.  Therefore, it's a  good  idea  to  archive  only  those
3796       classes  that are actually used by your application.  These usually are
3797       just a small portion of all available classes.  For example,  your  ap‐
3798       plication may use only a few APIs provided by a large library.
3799
3800   Using CDS Archives
3801       By default, in most JDK distributions, unless -Xshare:off is specified,
3802       the JVM starts up with a default CDS archive, which is usually  located
3803       in   JAVA_HOME/lib/server/classes.jsa  (or  JAVA_HOME\bin\server\class‐
3804       es.jsa on Windows).  This archive  contains  about  1300  core  library
3805       classes that are used by most applications.
3806
3807       To  use  CDS for the exact set of classes used by your application, you
3808       can use the -XX:SharedArchiveFile option, which has the general form:
3809
3810              -XX:SharedArchiveFile=<static_archive>:<dynamic_archive>
3811
3812       • The <static_archive> overrides the default CDS archive.
3813
3814       • The <dynamic_archive> provides additional classes that can be  loaded
3815         on top of those in the <static_archive>.
3816
3817       • On Windows, the above path delimiter : should be replaced with ;
3818
3819       (The names "static" and "dyanmic" are used for historical reasons.  The
3820       only significance is that the "static" archive is loaded first and  the
3821       "dynamic" archive is loaded second).
3822
3823       The  JVM  can use up to two archives.  To use only a single <static_ar‐
3824       chive>, you can omit the <dynamic_archive> portion:
3825
3826              -XX:SharedArchiveFile=<static_archive>
3827
3828       For convenience, the <dynamic_archive>  records  the  location  of  the
3829       <static_archive>.  Therefore, you can omit the <static_archive> by say‐
3830       ing only:
3831
3832              -XX:SharedArchiveFile=<dynamic_archive>
3833
3834   Creating CDS Archives
3835       CDS archives can be created with several methods:
3836
3837-Xshare:dump
3838
3839-XX:ArchiveClassesAtExit
3840
3841jcmd VM.cds
3842
3843       One common operation in all these methods is a "trial run",  where  you
3844       run the application once to determine the classes that should be stored
3845       in the archive.
3846
3847   Creating a Static CDS Archive File with -Xshare:dump
3848       The following steps create a static CDS archive file that contains  all
3849       the classes used by the test.Hello application.
3850
3851       1. Create  a  list  of  all classes used by the test.Hello application.
3852          The following command creates a file named hello.classlist that con‐
3853          tains a list of all classes used by this application:
3854
3855                  java -Xshare:off -XX:DumpLoadedClassList=hel‐
3856                  lo.classlist -cp hello.jar test.Hello
3857
3858           The classpath specified by the -cp parameter must contain only  JAR
3859           files.
3860
3861       2. Create  a  static  archive,  named  hello.jsa, that contains all the
3862          classes in hello.classlist:
3863
3864                  java -Xshare:dump -XX:SharedArchiveFile=hel‐
3865                  lo.jsa -XX:SharedClassListFile=hello.classlist -cp hello.jar
3866
3867       3. Run the application test.Hello with the archive hello.jsa:
3868
3869                  java -XX:SharedArchiveFile=hello.jsa -cp hello.jar test.Hel‐
3870                  lo
3871
3872       4. Optional Verify that the test.Hello application is using  the  class
3873          contained in the hello.jsa shared archive:
3874
3875                  java -XX:SharedArchiveFile=hello.jsa -cp hel‐
3876                  lo.jar -Xlog:class+load test.Hello
3877
3878           The output of this command should contain the following text:
3879
3880                  [info][class,load] test.Hello source: shared objects file
3881
3882   Creating a Dynamic CDS Archive File with -XX:SharedArchiveFile
3883       Advantages of dynamic CDS archives are:
3884
3885       • They usually use less disk space, since they don't need to store  the
3886         classes that are already in the static archive.
3887
3888       • They  are  created with one fewer step than the comparable static ar‐
3889         chive.
3890
3891       The following steps create a dynamic CDS archive file that contains the
3892       classes  that  are  used by the test.Hello application, excluding those
3893       that are already in the default CDS archive.
3894
3895       1. Create a dynamic CDS archive, named hello.jsa, that contains all the
3896          classes in hello.jar loaded by the application test.Hello:
3897
3898                  java -XX:ArchiveClassesAtExit=hello.jsa -cp hello.jar Hello
3899
3900       2. Run the application test.Hello with the shared archive hello.jsa:
3901
3902                  java -XX:SharedArchiveFile=hello.jsa -cp hello.jar test.Hel‐
3903                  lo
3904
3905       3. Optional Repeat step 4 of the previous section to  verify  that  the
3906          test.Hello application is using the class contained in the hello.jsa
3907          shared archive.
3908
3909       It's also possible to create a dynamic CDS archive with  a  non-default
3910       static CDS archive.  E.g.,
3911
3912              java -XX:SharedArchiveFile=base.jsa -XX:ArchiveClassesAtEx‐
3913              it=hello.jsa -cp hello.jar Hello
3914
3915       To run the application using this dynamic CDS archive:
3916
3917              java -XX:SharedArchiveFile=base.jsa:hello.jsa -cp hello.jar Hel‐
3918              lo
3919
3920       (On Windows, the above path delimiter : should be replaced with ;)
3921
3922       As mention above, the name of the static archive can be skipped:
3923
3924              java -XX:SharedArchiveFile=hello.jsa -cp hello.jar Hello
3925
3926   Creating CDS Archive Files with jcmd
3927       The  previous  two  sections  require  you  to modify the application's
3928       start-up script in order to create a CDS archive.  Sometimes this could
3929       be difficult, for example, if the application's class path is set up by
3930       complex routines.
3931
3932       The jcmd VM.cds command provides a less intrusive way  for  creating  a
3933       CDS archive by connecting to a running JVM process.  You can create ei‐
3934       ther a static:
3935
3936              jcmd <pid> VM.cds static_dump my_static_archive.jsa
3937
3938       or a dynamic archive:
3939
3940              jcmd <pid> VM.cds dynamic_dump my_dynamic_archive.jsa
3941
3942       To use the resulting archive file in a subsequent run of  the  applica‐
3943       tion  without  modifying the application's start-up script, you can use
3944       the following technique:
3945
3946              env JAVA_TOOL_OPTIONS=-XX:SharedArchiveFile=my_static_ar‐
3947              chive.jsa bash app_start.sh
3948
3949       Note: to use jcmd <pid> VM.cds dynamic_dump, the JVM process identified
3950       by <pid> must be started with -XX:+RecordDynamicDumpInfo, which can al‐
3951       so  be  passed  to  the application start-up script with the same tech‐
3952       nique:
3953
3954              env JAVA_TOOL_OPTIONS=-XX:+RecordDynamicDumpIn‐
3955              fo bash app_start.sh
3956
3957   Restrictions on Class Path and Module Path
3958       • Neither  the  class  path  (-classpath and -Xbootclasspath/a) nor the
3959         module path (--module-path) can contain non-empty directories.
3960
3961       • Only modular JAR files are supported in --module-path.  Exploded mod‐
3962         ules are not supported.
3963
3964       • The  class path used at archive creation time must be the same as (or
3965         a prefix of) the class path used at run time.  (There's no  such  re‐
3966         quirement for the module path.)
3967
3968       • The  CDS  archive cannot be loaded if any JAR files in the class path
3969         or module path are modified after the archive is generated.
3970
3971       • If any of the VM  options  --upgrade-module-path,  --patch-module  or
3972         --limit-modules  are specified, CDS is disabled.  This means that the
3973         JVM will execute without loading any CDS archives.  In  addition,  if
3974         you  try  to  create a CDS archive with any of these 3 options speci‐
3975         fied, the JVM will report an error.
3976

PERFORMANCE TUNING EXAMPLES

3978       You can use the Java advanced runtime options to optimize  the  perfor‐
3979       mance of your applications.
3980
3981   Tuning for Higher Throughput
3982       Use  the  following  commands  and  advanced  options to achieve higher
3983       throughput performance for your application:
3984
3985              java -server -XX:+UseParallelGC -XX:+Use‐
3986              LargePages -Xmn10g  -Xms26g -Xmx26g
3987
3988   Tuning for Lower Response Time
3989       Use  the  following  commands and advanced options to achieve lower re‐
3990       sponse times for your application:
3991
3992              java -XX:+UseG1GC -XX:MaxGCPauseMillis=100
3993
3994   Keeping the Java Heap Small and Reducing the Dynamic Footprint of
3995       Embedded Applications
3996
3997       Use the following advanced runtime options to keep the Java heap  small
3998       and reduce the dynamic footprint of embedded applications:
3999
4000              -XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5
4001
4002              Note: The defaults for these two options are 70% and 40% respec‐
4003              tively.  Because performance sacrifices  can  occur  when  using
4004              these  small settings, you should optimize for a small footprint
4005              by reducing these settings as much as possible without introduc‐
4006              ing unacceptable performance degradation.
4007

EXIT STATUS

4009       The  following  exit values are typically returned by the launcher when
4010       the launcher is called with the wrong arguments, serious errors, or ex‐
4011       ceptions  thrown by the JVM.  However, a Java application may choose to
4012       return any value by using the  API  call  System.exit(exitValue).   The
4013       values are:
4014
40150: Successful completion
4016
4017>0: An error occurred
4018
4019
4020
4021JDK 17                               2021                              JAVA(1)
Impressum