原地址:http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

java [ options ] classname [ args ]

java [ options ] -jar filename [ args ]

 
options  以空格分隔的命令行选项。请参阅选项

classname   要启动的类的名称。
filename  将要调用的Java Archive(JAR)文件的名称。仅与-jar选项一起使用。
args   递给main()方法的参数, 由空格分隔。

描述

java命令启动Java应用程序。它通过启动Java运行时环境(JRE),加载指定的类,并调用该类的main()方法来实现。该方法必须声明为publicstatic,它不能返回任何值,它必须接受String数组作为参数。方法声明具有以下形式:

public static void main(String [] args)

java命令可用于通过加载具有main()方法或扩展的类来启动JavaFX应用程序javafx.application.Application。在后一种情况下,启动器构造Application类的实例,调用其init()方法,然后调用该start(javafx.stage.Stage)方法。

默认情况下,不是java命令选项的第一个参数是要调用的类的完全限定名称。如果指定了该-jar选项,则其参数是包含应用程序的类和资源文件的JAR文件的名称。启动类必须由Main-Class源代码中的清单头指示。

JRE在三组位置中搜索启动类(以及应用程序使用的其他类):引导类路径,已安装的扩展和用户的类路径。

类文件名或JAR文件名后的参数传递给该main()方法。

选项

java命令支持多种选项,可分为以下几类:

Java虚拟机(JVM)的所有实现都保证支持标准选项。它们用于常见操作,例如检查JRE的版本,设置类路径,启用详细输出等。

非标准选项是特定于Java HotSpot Virtual Machine的通用选项,因此不能保证所有JVM实现都支持,并且可能会发生更改。这些选项以-X

高级选项不建议随意使用。这些是用于调整Java HotSpot Virtual Machine操作的特定区域的开发人员选项,这些操作通常具有特定的系统要求,并且可能需要对系统配置参数进行特权访问。它们也不能保证被所有JVM实现所支持,并且可能会发生变化。高级选项以-XX

要跟踪在最新版本中已弃用或删除的选项,在文档末尾有一个名为Deprecated和Removed Options的部分。

布尔选项用于启用默认情况下禁用的功能或禁用默认启用的功能。这样的选项不需要参数。-XX使用加号(-XX:+OptionName)启用布尔选项,并使用减号(-XX:-OptionName)禁用布尔选项。

对于需要参数的选项,参数可以通过空格,冒号(:)或等号(=)与选项名称分开,或者参数可以直接跟随选项(每个选项的确切语法不同) )。如果您希望指定大小(以字节为单位),则可以使用无后缀,或使用后缀kK千字节(KB)mM兆字节(MB)gG千兆字节(GB)。例如,设置大小为8 GB,您可以指定8g8192m8388608k,或8589934592作为参数。如果您希望指定百分比,请使用0到1之间的数字(例如,指定0.2525%)。

标准选项

这些是JVM的所有实现都支持的最常用的选项。

-agentlib:libname [= options ]

加载指定的本机代理库。在库名称之后,可以使用逗号分隔的库的特定选项列表。

如果指定了该选项-agentlib:foo,则JVM将尝试加载libfoo.soLD_LIBRARY_PATH系统变量指定的位置(在OS X此变量上DYLD_LIBRARY_PATH)中命名的库。

以下示例显示如何加载堆分析工具(HPROF)库,并每20 ms获取采样CPU信息,堆栈深度为3:

-agentlib:hprof=cpu=samples,interval=20,depth=3

以下示例显示如何加载Java Debug Wire Protocol(JDWP)库并侦听端口8000上的套接字连接,在加载主类之前挂起JVM:

-agentlib:jdwp=transport=dt_socket,server=y,address=8000

有关本地代理程序库的更多信息,请参阅以下内容:

-agentpath:pathname [= options ]

加载绝对路径名指定的本地代理程序库。此选项相当于-agentlib但使用库的完整路径和文件名。

-client

选择Java HotSpot Client VM。64位版本的Java SE开发工具包(JDK)目前忽略此选项,而是使用服务器JVM。

对于默认JVM选择,请参阅“Server-Class Machine detection”
http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html

-Dproperty=value

设置系统属性值。该属性变量是没有空格表示属性的名称的字符串。的变量是表示属性的值的字符串。如果value是带空格的字符串,则将其括在引号中(例如-Dfoo="foo bar")。

-d32

在32位环境中运行应用程序。如果未安装或不支持32位环境,则会报告错误。默认情况下,应用程序在32位环境中运行,除非使用64位系统。

-d64

在64位环境中运行应用程序。如果未安装或不支持64位环境,则会报告错误。默认情况下,应用程序在32位环境中运行,除非使用64位系统。

目前只有Java HotSpot Server VM支持64位操作,并且使用该-server选项是隐含的-d64。该-client选项被忽略使用-d64。这在将来的版本中可能会发生变化。

-disableassertions [:[ packagename ] … |:classname ]
-da [:[ packagename ] … |:classname ]

禁用断言。默认情况下,所有包和类中的断言都被禁用。

没有参数,-disableassertions-da)禁用所有包和类中的断言。当packagename参数结束时...,交换机将禁用指定的包和任何子包中的断言。如果参数简单...,则交换机将禁用当前工作目录中未命名的包中的断言。使用classname参数,交换机将禁用指定类中的断言。

-disableassertions-da)选项适用于所有的类加载器和系统类(其中没有一个类加载器)。此规则有一个例外:如果该选项没有参数,那么它不适用于系统类。这使得除系统类之外的所有类中禁用断言变得容易。该-disablesystemassertions选项使您能够在所有系统类中禁用断言。

要在特定包或类中显式启用断言,请使用-enableassertions-ea)选项。这两个选项可以同时使用。例如,要MyClass在程序包com.wombat.fruitbat(和任何子包中)启用断言并在类com.wombat.fruitbat.Brickbat中禁用的情况下运行应用程序,请使用以下命令:

java -ea:com.wombat.fruitbat ... -da:com.wombat.fruitbat.Brickbat MyClass
-disablesystemassertions
-dsa

禁用所有系统类中的断言。

-enableassertions [:[ packagename ] … |:classname ]
-ea [:[ packagename ] … |:classname ]

启用断言。默认情况下,所有包和类中的断言都被禁用。

没有参数,-enableassertions-ea)可以在所有包和类中使用断言。在packagename参数结束后...,交换机将在指定的包和任何子包中启用断言。如果参数简单...,则交换机将在当前工作目录中的未命名程序包中启用断言。使用classname参数,交换机将在指定的类中启用断言。

-enableassertions-ea)选项适用于所有的类加载器和系统类(其中没有一个类加载器)。此规则有一个例外:如果该选项没有参数,那么它不适用于系统类。这使得在除系统类之外的所有类中启用断言变得容易。该-enablesystemassertions选项提供单独的开关,以在所有系统类中启用断言。

要明确禁用特定包或类中的断言,请使用-disableassertions-da)选项。如果单个命令包含这些交换机的多个实例,则在加载任何类之前,它们将按顺序处理。例如,要使用MyClass仅在包com.wombat.fruitbat(和任何子包)中启用但在类com.wombat.fruitbat.Brickbat中禁用的断言来运行应用程序,请使用以下命令:

java -ea:com.wombat.fruitbat ... -da:com.wombat.fruitbat.Brickbat MyClass
-enablesystemassertions
-esa

在所有系统类中启用断言。

-help
-?

显示该java命令的使用信息,而不实际运行JVM。

-jar filename

执行封装在JAR文件中的程序。该文件名参数是与包含在形成一条线的清单JAR文件的名称Main-Class:classname,定义与类public static void main(String[] args)充当应用程序的出发点方法。

使用该-jar选项时,指定的JAR文件是所有用户类的源,其他类路径设置将被忽略。

有关JAR文件的更多信息,请参阅以下资源:

-javaagent:jarpath [= options ]

加载指定的Java编程语言代理。有关测试Java应用程序的更多信息,请参阅java.lang.instrumentJava API文档中的软件包描述http://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html

-jre-restrict-search

在版本搜索中包含用户私有JRE。

-no-JRE-restrict-search

从版本搜索中排除用户私有JRE。

-server

选择Java HotSpot Server VM。64位版本的JDK仅支持Server VM,因此在该情况下该选项是隐式的。

对于默认JVM选择,see Server-Class Machine Deltection at 
http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html

-showversion

显示版本信息并继续执行应用程序。此选项等同于该-version选项,除了后者指示JVM在显示版本信息后退出。

-splash:imgname

显示与由指定的图像闪屏imgname。例如,要在启动应用程序时从splash.gif目录显示文件images,请使用以下选项:

-splash:images/splash.gif
-verbose:class

显示有关每个加载类的信息。

-verbose:GC

显示有关每个垃圾收集(GC)事件的信息。

-verbose:JNI

显示有关使用本地方法和其他Java Native Interface(JNI)活动的信息。

-version

显示版本信息,然后退出。此选项等同于该-showversion选项,除了后者在显示版本信息后不指示JVM退出。

-version:release

指定用于运行应用程序的发行版本。如果java调用的命令的版本不符合此规范,并在系统上找到适当的实现,则将使用适当的实现。

版本参数指定任何确切的版本字符串,或版本字符串,用空格分隔范围的列表。甲版本字符串是在以下形式的版本号的显影剂代号:1..0_ù(其中X是主版本号,并且Ü是更新版本号)。甲版本范围是由一个版本字符串后跟一个加号的(+)来指定该版本或更高版本,或版本字符串后跟一个星号(的一部分*)来指定任何版本字符串具有匹配前缀。版本字符串和范围可以使用逻辑组合的空格进行组合,或两个版本字符串/范围&的逻辑AND组合的&符号( )。例如,如果运行类或JAR文件需要JRE 6u13(1.6.0_13)或从6u10(1.6.0_10)开始的任何JRE 6,请指定以下内容:

-version:“1.6.0_13 1.6 *&1.6.0_10 +”

仅当释放参数中有空格时,才需要引号。

对于JAR文件,首选项是在JAR文件清单中指定版本要求,而不是在命令行中。

Non-Standard Options(非标准选项)

这些选项是Java HotSpot Virtual Machine特有的通用选项。

-X

显示所有可用-X选项的帮助。

-Xbatch

禁用后台编译。默认情况下,JVM将该方法作为后台任务进行编译,在解释器模式下运行该方法,直到后台编译完成。该-Xbatch标志禁用背景编译,以便所有方法的编译作为前台任务进行,直到完成。

此选项相当于-XX:-BackgroundCompilation

-Xbootclasspath:path

指定由冒号(:)分隔的目录,JAR文件和ZIP存档列表,以搜索引导类文件。这些用于代替JDK中包含的引导类文件。

不要部署使用此选项覆盖类的应用程序rt.jar,因为这违反了JRE二进制代码许可证。

-Xbootclasspath / a:path

指定由冒号(:)分隔的目录,JAR文件和ZIP存档列表,以附加到默认引导类路径的末尾。

不要部署使用此选项覆盖类的应用程序rt.jar,因为这违反了JRE二进制代码许可证。

-Xbootclasspath / p:path

指定以冒号(:)分隔的目录,JAR文件和ZIP存档列表,以前置到默认引导类路径的前端。

不要部署使用此选项覆盖类的应用程序rt.jar,因为这违反了JRE二进制代码许可证。

-Xcheck:jni

对Java Native Interface(JNI)函数执行其他检查。具体来说,它在处理JNI请求之前验证传递给JNI函数和运行时环境数据的参数。遇到的任何无效数据表示本地代码中存在问题,并且在这种情况下,JVM将以不可恢复的错误终止。使用此选项时,可能会降低性能。

-Xcomp

强制汇编首次调用方法。默认情况下,客户端VM(-client)执行1,000个解释方法调用,并且服务器VM(-server)执行10,000个解释方法调用以收集信息以进行高效编译。指定该-Xcomp选项将禁用解释性方法调用以牺牲效率来提高编译性能。

您还可以使用该-XX:CompileThreshold选项在编译之前更改解释方法调用的数量。

-Xdebug

什么也没做。提供向后兼容性。

-Xdiag

显示其他诊断消息。

-Xfuture

启用严格的类文件格式检查,强制实现与类文件格式规范的紧密一致。鼓励开发人员在开发新代码时使用此标志,因为在未来的版本中,更严格的检查将成为默认值。

-Xint

以仅解释模式运行应用程序。编译到本地代码是禁用的,所有的字节码都由解释器执行。此模式中不存在即时(JIT)编译器提供的性能优势。

-Xinternalversion

显示比该-version选项更详细的JVM版本信息,然后退出。

-Xloggc:filename

将要重定向的详细GC事件信息的文件设置为记录。写入此文件的信息与-verbose:gc每个记录事件之前的第一个GC事件所经过的时间的输出类似。如果两者都使用相同的命令,该-Xloggc选项将覆盖。-verbose:gcjava

例:

-Xloggc:垃圾collection.log

-Xmaxjitcodesize = size

指定JIT编译代码的最大代码高速缓存大小(以字节为单位)。附加信件kK指示千字节,mM指示兆字节,gG表示千兆字节。默认的最大代码缓存大小为240 MB; 如果您使用该选项禁用分层编译-XX:-TieredCompilation,则默认大小为48 MB:

-Xmaxjitcodesize =240米

此选项相当于-XX:ReservedCodeCacheSize

-Xmixed

由解释器执行所有字节码,除了热方法,它们被编译为本地代码。

-Xmn size

设置年轻代的大小(以字节为单位)。如果以kK结尾,则表示千字节,mM指示兆字节,gG表示千兆字节。

堆的年轻代区域用于新对象。GC在这个地区比其他地区更频繁地进行。如果年轻代的规模太小,那么将会执行大量的minor garbage。如果太大,那么只会执行full garbage,但是需要很长时间才能完成。Oracle建议您将年轻代的大小保持在整个堆大小的一半到四分之一之间。

以下示例显示如何使用各种单位将年轻代的初始和最大大小设置为256MB:

-Xmn256m 
-Xmn262144k 
-Xmn268435456

而不是-Xmn为年轻代-XX:NewSize设置堆的初始和最大大小的选项,您可以使用设置初始大小和-XX:MaxNewSize设置最大大小。

-Xms size

设置堆的初始大小(以字节为单位)。该值必须是1024和大于1 MB的倍数。如果以kK结尾表示千字节,mM指示兆字节,gG表示千兆字节。

以下示例将分配的内存大小设置为6MB(三种方式均可):

-Xms6291456 
-Xms6144k 
-Xms6m

如果您不设置此选项,则初始大小将被设置为为老年代和年轻代分配的大小的总和。可以使用-Xmn选项或-XX:NewSize选项设置年轻代的堆的初始大小。

-Xmx size

指定JVM最大的可用(堆)内存(以字节为单位),以字节为单位。此值必须是1024和大于2 MB的倍数。如果以kK结尾表示千字节,mM指示兆字节,gG表示千兆字节。默认值是基于系统配置在运行时选择的。对于服务器部署,-Xms并且-Xmx通常设置为相同的值。见一节“人体工程学” 的Java SE HotSpot虚拟机垃圾收集调优指南http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html

以下示例将分配的内存的最大允许大小设置为80MB:

-Xmx83886080 
-Xmx81920k 
-Xmx80m

-Xmx选项相当于-XX:MaxHeapSize

JVM最大的可用内存 = 年轻代大小 + 年老代大小 + 持久代大小

-Xnoclassgc

禁用类的垃圾收集(GC)。这可以节省一些GC时间,这缩短了应用程序运行期间的中断。

当您-Xnoclassgc在启动时指定时,应用程序中的类对象将在GC期间保持不变,并始终被视为实时的。这可能导致更多的内存被永久占用,如果不小心使用,将会丢失内存异常。

-Xprof

配置运行程序并将配置文件数据发送到标准输出。该选项作为在程序开发中有用的实用程序提供,不用于生产系统。

-Xrs

减少JVM使用操作系统信号。

关闭挂钩可以通过在关机时运行用户清理代码(如关闭数据库连接)来有序地关闭Java应用程序,即使JVM突然终止。

JVM捕获信号以实现意外终止的关闭挂钩。JVM使用SIGHUPSIGINTSIGTERM启动关闭挂钩的运行。

JVM使用类似的机制实现转储线程堆栈的功能以进行调试。JVM用于SIGQUIT执行线程转储。

嵌入JVM的应用程序经常需要捕获诸如SIGINT或者SIGTERM可能导致对JVM信号处理程序的干扰的信号。该-Xrs选项可用于解决此问题。当-Xrs被使用时,用于信号掩模SIGINTSIGTERMSIGHUP,和SIGQUIT不被JVM改变,并且对于这些信号的信号处理程序没有安装。

有两个后果指定-Xrs

  • SIGQUIT 线程转储不可用。

  • 例如,System.exit()当JVM要终止时,用户代码负责关闭挂钩的运行。

-Xshare:mode

设置类数据共享(CDS)模式。此选项的可能模式参数包括以下内容:

auto

尽可能使用CDS。这是Java HotSpot 32位客户端虚拟机的默认值。

on

需要使用CDS。如果不能使用类数据共享,则打印错误消息并退出。

off

不要使用CDS。这是Java HotSpot 32位服务器虚拟机,Java HotSpot 64位客户端虚拟机和Java HotSpot 64位服务器虚拟机的默认值。

dump

手动生成CDS存档。按照“设置类路径”中所述指定应用程序类路径。

您应该使用每个新的JDK版本重新生成CDS存档。

-XshowSettings:category

显示设置并继续。此选项的可能类别参数包括以下内容:

all

显示所有类别的设置。这是默认值。

locale

显示与区域设置相关的设置。

properties

显示与系统属性相关的设置。

vm

显示JVM的设置。

-Xss size

设置线程堆栈大小(以字节为单位)。kK指示KB,mM指示MB,gG指示GB。默认值取决于平台:

  • Linux / ARM(32位):320 KB

  • Linux / i386(32位):320 KB

  • Linux / x64(64位):1024 KB

  • OS X(64位):1024 KB

  • Oracle Solaris / i386(32位):320 KB

  • Oracle Solaris / x64(64位):1024 KB

以下示例将线程堆栈大小设置为1024 KB不同的单位:

-Xss1m 
-Xss1024k 
-Xss1048576

此选项相当于-XX:ThreadStackSize

-Xusealtsigs

使用替代信号,而不是SIGUSR1SIGUSR2对JVM内部信号。此选项相当于-XX:+UseAltSigs

-Xverify:model

设置字节码验证器的模式。字节码验证确保类文件正确形成,并满足Java虚拟机规范中列出的约束 ; 见4.10节“ class文件验证”:

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.10

在运行动态生成的或不可信的类文件时,不要关闭验证,因为这样可以减少Java提供的保护,从而使错误形式的字节码的诊断更加困难。

此选项的可能模式参数包括以下内容:

remote  

验证引导类加载器未加载的所有字节码。这是默认行为。

all  

启用对所有字节码的验证。

none  

禁用对所有字节码的验证。

高级运行时选项

这些选项控制Java HotSpot VM的运行时行为。

-XX:+ CheckEndorsedAndExtDirs

启用该选项,以防止该java命令运行Java应用程序,如果它使用已批准的标准超驰机制或扩展机制。此选项通过检查以下内容来检查应用程序是否正在使用这些机制之一:

  • 该属性java.ext.dirsjava.endorsed.dirs系统属性已设置。

  • lib/endorsed目录存在且不为空。

  • lib/ext目录包含除了JDK之外的任何JAR文件。

  • 系统范围的平台特定扩展目录包含任何JAR文件。

-XX:+ DisableAttachMechanism

启用禁用允许工具附加到JVM的机制的选项。默认情况下,该选项被禁用,这意味着连接机制启用,您可以使用工具,例如jcmdjstackjmap,和jinfo

-XX:ErrorFile = filename

指定发生不可恢复错误时写入错误数据的路径和文件名。默认情况下,此文件在当前工作目录中创建并命名为hs_err_pidpid.log,其中pid是导致错误的进程的标识符。以下示例显示如何设置默认日志文件(请注意,进程的标识符被指定为%p):

-XX:ErrorFile=/hs_err_pid%p.log

以下示例显示如何将错误日志设置为/var/log/java/java_error.log

-XX:ErrorFile= /var/log/ JAVA / java_error.log

如果无法在指定的目录中创建文件(由于空间不足,权限问题或其他问题),则该文件将在操作系统的临时目录中创建。临时目录是/tmp

-XX:+ FailOverToOldVerifier

当新的类型检查程序失败时,启用对旧验证程序的自动故障切换。默认情况下,此选项被禁用,并且对于具有最近的字节码版本的类,它被忽略(即被视为禁用)。您可以将其用于具有旧版本的字节码的类。

-XX:+ FlightRecorder

允许在应用程序运行时使用Java Flight Recorder(JFR)。这是一个商业功能,与以下-XX:+UnlockCommercialFeatures选项配合使用:

java -XX:+ UnlockCommercialFeatures -XX:+ FlightRecorder

如果未提供此选项,则仍可以通过提供相应的jcmd诊断命令,在运行的JVM中启用Java Flight Recorder 。

-XX:-FlightRecorder

在应用程序的运行期间禁用Java Flight Recorder(JFR)的使用。这是一个商业功能,与以下-XX:+UnlockCommercialFeatures选项配合使用:

java -XX:+ UnlockCommercialFeatures -XX:-FlightRecorder

如果提供此选项,则无法在正在运行的JVM中启用Java Flight Recorder。

-XX:FlightRecorderOptions = parameter = value

设置控制JFR行为的参数。这是一个与-XX:+UnlockCommercialFeatures选项配合使用的商业功能。仅当启用JFR(即指定了该-XX:+FlightRecorder选项)时,才能使用此选项。

以下列表包含所有可用的JFR参数:

defaultrecording = {true|false}

指定录制是连续的背景录制还是在有限的时间内运行。默认情况下,此参数设置为false(记录运行有限的时间)。要使录制持续运行,请将参数设置为true

disk= {true|false}

指定JFR是否应将连续记录写入磁盘。默认情况下,此参数设置为false(禁止连续录制到磁盘)。要启用它,请将参数设置为true,并设置defaultrecording=true

dumponexit = {true|false}

指定当JVM以受控的方式终止时是否应生成JFR数据的转储文件。默认情况下,此参数设置为false(不退出转储文件)。要启用它,请将参数设置为true,并设置defaultrecording=true

转储文件被写入由dumponexitpath参数定义的位置。

dumponexitpath = path

指定当JVM以受控方式退出时创建的JFR数据的转储文件的路径和名称,如果设置dumponexit=true参数。设置路径只有在您设置时才有意义defaultrecording=true

如果指定的路径是目录,则JVM会分配一个显示创建日期和时间的文件名。如果指定的路径包含一个文件名,如果该文件已经存在,JVM将通过将日期和时间戳记附加到指定的文件名来创建一个新文件。

globalbuffersize = size

指定用于数据保留的主内存(以字节为单位)的总量。追加kK到指定KB大小,mM以MB为单位指定大小,gG到指定GB的大小。默认情况下,大小设置为462848字节。

日志等级= {quiet|error|warning|info|debug|trace}

指定通过JFR写入日志文件的数据量。默认设置为info

maxage = time

指定要保留默认录制的磁盘数据的最大时间。追加s以秒m为单位指定时间,分钟,h数小时或d天数(例如,指定30s30秒)。默认情况下,最大年龄设置为15分钟(15m)。

此参数仅在设置参数时有效disk=true

maxchunksize = size

指定记录中数据块的最大大小(以字节为单位)。追加kK到指定KB大小,mM以MB为单位指定大小,gG到指定GB的大小。默认情况下,数据块的最大大小设置为12 MB。

maxsize = size

指定要保留的默认记录的磁盘数据的最大大小(以字节为单位)。追加kK到指定KB大小,mM以MB为单位指定大小,gG到指定GB的大小。默认情况下,磁盘数据的最大大小不受限制,此参数设置为0。

此参数仅在设置参数时有效disk=true

repository = path

指定用于临时磁盘存储的存储库(一个目录)。默认情况下,使用系统的临时目录。

samplethreads = {true|false}

指定是否启用线程采样。线程采样仅在采样事件与此参数一起使能时进行。默认情况下,启用此参数。

settings =path

指定事件设置文件的路径和名称(类型为JFC)。默认情况下,使用的default.jfc文件位于JAVA_HOME/jre/lib/jfr

stackdepth = depth

JFR堆栈跟踪堆栈深度。默认情况下,深度设置为64种方法调用。最大为2048,最小为1。

threadbuffersize = size

指定每线程本地缓冲区大小(以字节为单位)。追加kK到指定KB大小,mM以MB为单位指定大小,gG到指定GB的大小。此参数的较高值允许更多的数据收集而无需争用将其刷新到全局存储。它可以在线程丰富的环境中增加应用程序占用空间。默认情况下,本地缓冲区大小设置为5 KB。

您可以通过用逗号分隔多个参数来指定值。例如,要指示JFR将连续记录写入磁盘,并将数据块的最大大小设置为10 MB,请指定以下内容:

-XX:FlightRecorderOptions = defaultrecording = TRUE,磁盘= TRUE,maxchunksize = 10M

-XX:LargePageSizeInBytes = size

在Solaris上,设置用于Java堆的大页面的最大大小(以字节为单位)。的尺寸参数必须是2的幂(2,4,8,16,…)。附加信件kK指示千字节,mM指示兆字节,gG表示千兆字节。默认情况下,大小设置为0,这意味着JVM自动选择大页面的大小。

以下示例说明如何将大页面大小设置为4兆字节(MB):

-XX:LargePageSizeInBytes =4米

-XX:MaxDirectMemorySize = size

设置新I / O(java.nio包)直接缓冲区分配的最大总大小(以字节为单位)。附加信件kK指示千字节,mM指示兆字节,gG表示千兆字节。默认情况下,大小设置为0,这意味着JVM自动选择NIO直接缓冲区分配的大小。

以下示例说明如何将NIO大小设置为1024 KB的不同单位:

-XX:MaxDirectMemorySize = 1m 
-XX:MaxDirectMemorySize = 1024k 
-XX:MaxDirectMemorySize = 1048576

-XX:NativeMemoryTracking = mode

指定跟踪JVM本地内存使用情况的模式。此选项的可能模式参数包括以下内容:

off   

不跟踪JVM本地内存使用情况。如果不指定该-XX:NativeMemoryTracking选项,则这是默认行为。

summary  

仅跟踪JVM子系统的内存使用情况,如Java堆,类,代码和线程。

detail  

除跟踪JVM子系统的内存使用情况外,还可以跟踪个别CallSite,个别虚拟内存区域及其承诺区域的内存使用情况。

-XX:ObjectAlignmentInBytes = 对齐

设置Java对象的内存对齐方式(以字节为单位)。默认情况下,该值设置为8个字节。指定值应为2的幂,并且必须在8和256(含)范围内。此选项使得可以使用具有大Java堆大小的压缩指针。

堆大小限制(以字节为单位)计算为:

4GB * ObjectAlignmentInBytes

注意:随着对齐值的增加,对象之间的未使用空间也将增加。因此,您可能无法从使用具有大型Java堆大小的压缩指针获得任何好处。

-XX:OnError = string

设置自定义命令或一系列分号分隔的命令,以在不可恢复的错误发生时运行。如果字符串包含空格,则必须用引号括起来。

以下示例显示了如何使用该-XX:OnError选项来运行gcore命令来创建核心映像,并且调试器在不可恢复的错误(%p指定当前进程)的情况下开始附加到进程):

-XX:OnError =“gcore%p; dbx  - %p”

-XX:OnOutOfMemoryError = string

设置一个自定义命令或一系列分号分隔的命令,以便在OutOfMemoryError首次抛出异常时运行。如果字符串包含空格,则必须用引号括起来。有关命令字符串的示例,请参阅-XX:OnError选项的说明。

-XX:+ PerfDataSaveToFile

如果启用,则在Java应用程序退出时

保存jstat(1)二进制数据。这个二进制数据保存在一个名为的文件中hsperfdata_<pid>,其中<pid>是您运行的Java应用程序的进程标识符。使用jstat如下显示包含在该文件中的性能数据:

jstat -class文件:/// <path> / hsperfdata_ <pid> 
jstat -gc file:/// <path> / hsperfdata_ <pid>
-XX:+ PrintCommandLineFlags

启用在命令行上显示的人机工程学选择的JVM标志的打印。了解由JVM设置的人机工程学值,例如堆空间大小和所选的垃圾收集器可能是有用的。默认情况下,禁用此选项,并且不打印标志。

-XX:+ PrintNMTStatistics

启用本机内存跟踪时,可以在JVM退出时打印收集的本地内存跟踪数据(请参阅-XX:NativeMemoryTracking)。默认情况下,此选项被禁用,并且未打印本机内存跟踪数据。

-XX:+ RelaxAccessControlCheck

减少验证者访问控制检查的数量。默认情况下,此选项被禁用,并且对于具有最近的字节码版本的类,它被忽略(即被视为禁用)。您可以将其用于具有旧版本的字节码的类。

-XX:+ ResourceManagement

允许在应用程序运行时使用资源管理。

这是一个商业功能,您还需要指定-XX:+UnlockCommercialFeatures如下选项:

java -XX:+UnlockCommercialFeatures -XX:+ResourceManagement

-XX:ResourceManagementSampleInterval = value(milliseconds)

设置控制资源管理测量的采样间隔的参数(以毫秒为单位)。

仅当启用资源管理(即指定了该-XX:+ResourceManagement选项)时,才能使用此选项。

-XX:SharedArchiveFile = path

指定类数据共享(CDS)归档文件的路径和名称

-XX:SharedClassListFile = file_name

指定包含要存储在类数据共享(CDS)归档中的类文件的名称的文本文件。该文件包含每行一个类文件的全名,除了斜杠(/)替换dots(.)。例如,要指定类java.lang.Object,并hello.Main创建一个包含以下两行的文本文件:

java / lang / Object 
你好/主

您在此文本文件中指定的类文件应包括应用程序通常使用的类。它们可以包括来自应用程序,扩展或引导类路径的任何类。

-XX:+ ShowMessageBoxOnError

当JVM遇到不可恢复的错误时,显示对话框。这样可以防止JVM退出并保持进程处于活动状态,以便您可以将调试器附加到其中以调查错误的原因。默认情况下,此选项被禁用。

-XX:StartFlightRecording = parameter = value

启动Java应用程序的JFR记录。这是一个与-XX:+UnlockCommercialFeatures选项配合使用的商业功能。此选项JFR.start相当于在运行时启动录像的诊断命令。启动JFR录制时可以设置以下参数:

compress= {true|false}

指定是否使用gzip文件压缩实用程序压缩磁盘上的JFR记录日志文件(JFR类型)。此参数仅在指定filename参数时有效。默认设置为false(录制未压缩)。要启用压缩,请将参数设置为true

defaultrecording = {true|false}

指定录制是连续的背景录制还是在有限的时间内运行。默认情况下,此参数设置为false(记录运行有限的时间)。要使录制持续运行,请将参数设置为true

delay= time
  指定Java应用程序启动时间和录制开始之间的延迟。追加s以秒m为单位指定时间,分钟,h数小时或d天数(例如,指定10m10分钟)。默认情况下,没有延迟,此参数设置为0。
dumponexit = {true|false}

指定当JVM以受控的方式终止时是否应生成JFR数据的转储文件。默认情况下,此参数设置为false(不退出转储文件)。要启用它,请将参数设置为true

转储文件被写入由filename参数定义的位置。

例:

-XX:StartFlightRecording =名=测试中,文件名= D:\ test.jfr,dumponexit =真
duration=time

指定录像的持续时间。追加s指定时间(以秒m为单位),分钟,h小时或d天数(例如,指定5h5小时)。默认情况下,持续时间不受限制,此参数设置为0。

filename=path

指定JFR记录日志文件的路径和名称。

name =identifier

指定JFR记录的标识符。默认设置为Recording x

maxage =time

指定要保留默认录制的磁盘数据的最大时间。追加s以秒m为单位指定时间,分钟,h数小时或d天数(例如,指定30s30秒)。默认情况下,最大年龄设置为15分钟(15m)。

maxsize = size

指定要保留的默认记录的磁盘数据的最大大小(以字节为单位)。追加kK到指定KB大小,mM以MB为单位指定大小,gG到指定GB的大小。默认情况下,磁盘数据的最大大小不受限制,此参数设置为0。

settings = path

指定事件设置文件的路径和名称(类型为JFC)。默认情况下,使用的default.jfc文件位于JAVA_HOME/jre/lib/jfr

您可以通过用逗号分隔多个参数来指定值。例如,要将录音保存到当前工作目录中的test.jfr,并指示JFR压缩日志文件,请指定以下内容:

-XX:StartFlightRecording =文件名= test.jfr,压缩= TRUE
-XX:ThreadStackSize = size

设置线程堆栈大小(以字节为单位)。附加信件kK指示千字节,mM指示兆字节,gG表示千兆字节。默认值取决于平台:

  • Linux / ARM(32位):320 KB

  • Linux / i386(32位):320 KB

  • Linux / x64(64位):1024 KB

  • OS X(64位):1024 KB

  • Oracle Solaris / i386(32位):320 KB

  • Oracle Solaris / x64(64位):1024 KB

以下示例显示如何将线程堆栈大小设置为1024 KB的不同单位:

-XX:ThreadStackSize = 1m 
-XX:ThreadStackSize = 1024k 
-XX:ThreadStackSize = 1048576

此选项相当于-Xss

-XX:+ TraceClassLoading

在加载类时启用跟踪。默认情况下,此选项被禁用,并且没有跟踪类。

-XX:+ TraceClassLoadingPreorder

启用所有加载类的跟踪,以引用它们的顺序。默认情况下,此选项被禁用,并且没有跟踪类。

-XX:+ TraceClassResolution

启用跟踪常量池分辨率。默认情况下,禁用此选项,并且不跟踪常量池分辨率。

-XX:+ TraceClassUnloading

启用在卸载时跟踪类。默认情况下,此选项被禁用,并且没有跟踪类。

-XX:+ TraceLoaderConstraints

启用跟踪加载器约束记录。默认情况下,禁用此选项,并且不跟踪加载器约束记录。

-XX:+ UnlockCommercialFeatures

使用商业功能。Java SE产品页面上定义的Oracle Java SE Advanced或Oracle Java SE Suite软件包附带了商业功能http://www.oracle.com/technetwork/java/javase/terms/products/index.html

默认情况下,此选项被禁用,JVM运行时没有商业功能。一旦启用了JVM进程,就不可能禁用该进程的使用。

如果未提供此选项,则通过使用相应的jcmd诊断命令,仍可以在正在运行的JVM中解除商业功能。

-XX:+ UseAltSigs

使得能够使用替代信号,而不是SIGUSR1SIGUSR2用于JVM内部信号。默认情况下,禁用此选项,不使用替代信号。此选项相当于-Xusealtsigs

-XX:+ UseAppCDS

启用应用程序类数据共享(AppCDS)。要使用AppCDS,还必须为选项-XX:SharedClassListFile-XX:SharedArchiveFileCDS转储时间(见选项-Xshare:dump)和应用程序运行时间指定值。

这是一个商业功能,需要您同时指定该-XX:+UnlockCommercialFeatures选项。这也是一个实验功能; 它可能会在将来的版本中改变。

请参见“应用程序类数据共享”

-XX:-UseBiasedLocking

禁止使用偏置锁定。具有大量无限制同步的一些应用程序可以在启用此标志的情况下获得显着的加速,而具有某些锁定模式的应用程序可能会看到减速。有关偏置锁定技术的更多信息,请参阅Java调整白皮书中的示例http://www.oracle.com/technetwork/java/tuning-139912.html#section4.2.5

默认情况下,启用此选项。

-XX:-UseCompressedOops

禁用使用压缩指针。默认情况下,启用此选项,并且当Java堆大小小于32 GB时,将使用压缩指针。启用此选项时,对象引用表示为32位偏移,而不是64位指针,这通常会在运行Java堆大小小于32 GB的应用程序时提高性能。此选项仅适用于64位JVM。

当Java堆大小大于32GB时,也可以使用压缩指针。看到-XX:ObjectAlignmentInBytes选项。

-XX:+ UseHugeTLBFS

Linux的这个选项等同于指定-XX:+UseLargePages。默认情况下禁用此选项。当选择内存时,此选项将预先分配所有大页面; 因此JVM不能动态增长或缩小大页面内存区域; 看看-XX:UseTransparentHugePages你是否想要这个行为。

有关详细信息,请参阅“大页面”

-XX:+ UseLargePages

启用大页面内存的使用。默认情况下,禁用此选项,不使用大页面内存。

有关详细信息,请参阅“大页面”

-XX:+ UseMembar

允许在线程状态转换上发布膜。默认情况下,该选项在除ARM服务器之外的所有平台上都被禁用,这些平台已启用。(建议您不要在ARM服务器上禁用此选项。)

-XX:+ UsePerfData

启用该perfdata功能。此选项默认启用以允许JVM监视和性能测试。禁用它可以禁止创建hsperfdata_userid目录。要禁用该perfdata功能,请指定-XX:-UsePerfData

-XX:+ UseTransparentHugePages

在Linux上,可以使用可以动态增长或缩小的大页面。默认情况下禁用此选项。您可能会遇到性能问题与透明巨大的页面,因为操作系统移动其他页面创建巨大的页面; 此选项可用于实验。

有关详细信息,请参阅“大页面”

-XX:+ AllowUserSignalHandlers

允许应用程序安装信号处理程序。默认情况下,此选项被禁用,并且应用程序不允许安装信号处理程序。

高级JIT编译器选项

这些选项控制由Java HotSpot VM执行的动态即时(JIT)编译。

-XX:+ AggressiveOpts

可以使用积极的性能优化功能,预计在即将发布的版本中将会成为默认的性能优化功能。默认情况下,此选项被禁用,并且不使用实验性能功能。

-XX:AllocateInstancePrefetchLines = 

设置在实例分配指针之前预取的行数。默认情况下,预取行数设置为1:

-XX:AllocateInstancePrefetchLines = 1

只有Java HotSpot Server VM支持此选项。

-XX:AllocatePrefetchDistance = size

设置对象分配的预取距离的大小(以字节为单位)。要用新对象的值写入的存储器将从最后分配对象的地址开始预留到此距离。每个Java线程都有自己的分配点。

负值表示基于平台选择预取距离。正值是要预取的字节。附加信件kK指示千字节,mM指示兆字节,gG表示千兆字节。默认值设置为-1。

以下示例显示如何将预取距离设置为1024字节:

-XX:AllocatePrefetchDistance = 1024

只有Java HotSpot Server VM支持此选项。

-XX:AllocatePrefetchInstr = 指令

将预取指令设置为在分配指针之前进行预取。只有Java HotSpot Server VM支持此选项。可能的值为0到3.值之后的实际指示取决于平台。默认情况下,预取指令设置为0:

-XX:AllocatePrefetchInstr = 0

只有Java HotSpot Server VM支持此选项。

-XX:AllocatePrefetchLines = lines

通过使用在编译代码中生成的预取指令,设置最后一个对象分配后要加载的高速缓存行数。如果最后一个分配的对象是一个实例,默认值为1,如果是一个数组,则为3。

以下示例显示如何将加载的缓存行数设置为5:

-XX:AllocatePrefetchLines = 5

只有Java HotSpot Server VM支持此选项。

-XX:AllocatePrefetchStepSize = size

设置顺序预取指令的步长(以字节为单位)。附加信件kK指示千字节,mM指示兆字节,gG表示千兆字节。默认情况下,步长设置为16字节:

-XX:AllocatePrefetchStepSize = 16

只有Java HotSpot Server VM支持此选项。

-XX:AllocatePrefetchStyle = style

为预取指令设置生成的代码样式。的风格参数是从0至3的整数:

0  不生成预取指令。
1  每次分配后执行预取指令。这是默认参数。
2  使用线程本地分配块(TLAB)水印指针来确定何时执行预取指令。
3  在SPARC上使用BIS指令进行分配预取。

只有Java HotSpot Server VM支持此选项。

-XX:+ BackgroundCompilation

启用后台编译。默认情况下启用此选项。要禁用后台编译,请指定-XX:-BackgroundCompilation(这等同于指定-Xbatch)。

-XX:CICompilerCount = 线程

设置用于编译的编译器线程数。默认情况下,服务器JVM的线程数设置为2,对于客户机JVM,线程数设置为1,如果使用分层编译,则将其缩放为核心数。以下示例显示如何将线程数设置为2:

-XX:CICompilerCount = 2
-XX:CodeCacheMinimumFreeSpace = size

设置编译所需的最小可用空间(以字节为单位)。附加信件kK指示千字节,mM指示兆字节,gG表示千兆字节。当小于最小可用空间时,编译停止。默认情况下,此选项设置为500 KB。以下示例显示如何将最小可用空间设置为1024 MB:

-XX:CodeCacheMinimumFreeSpace =1024米
-XX:CompileCommand = commandmethod [,option ]

指定一个方法执行的命令。例如,要排除该类的indexOf()方法String被编译,请使用以下命令:

-XX:CompileCommand =exclude,java/lang/String.indexOf

请注意,指定了完整的类名称,包括用slash(/)分隔的所有包和子包。为了便于剪切和粘贴操作,还可以使用由产生的方法名称格式-XX:+PrintCompilation-XX:+LogCompilation选项:

-XX:CompileCommand =exclude,java.lang.String::indexOf

如果在没有签名的情况下指定了该方法,则该命令将应用于具有指定名称的所有方法。但是,您也可以以类文件格式指定方法的签名。在这种情况下,您应该将参数括在引号中,否则shell将分号作为命令结束。例如,如果要仅排除该类的indexOf(String)方法String被编译,请使用以下命令:

-XX:CompileCommand = “exclude,java/lang/String.indexOf,(Ljava /lang/String;)I”

您也可以使用星号(*)作为类和方法名称的通配符。例如,要排除所有indexOf()类中的所有方法被编译,请使用以下命令:

-XX:CompileCommand =eclcude,*.indexOf。

逗号和句点是空格的别名,使得通过shell更容易地传递编译器命令。您可以通过-XX:CompileCommand将参数括入引号将传入参数作为分隔符使用空格:

-XX:CompileCommand =“exclude java/lang/String indexOf”

请注意,在解析使用-XX:CompileCommand选项在命令行上传递的命令后,JIT编译器然后从.hotspot_compiler文件中读取命令。您可以向此文件添加命令或使用该-XX:CompileCommandFile选项指定其他文件。

要添加多个命令,可以-XX:CompileCommand多次指定该选项,也可以使用换行符分隔每个参数\n。以下命令可用:

break

在调试JVM时,在指定方法的编译开始时设置断点。

compileonly

从编译中排除所有方法,除了指定的方法。或者,您可以使用该-XX:CompileOnly选项,允许指定多种方法。

dontinline

防止指定方法的内联。

exclude

从编译中排除指定的方法。

help

打印该-XX:CompileCommand选项的帮助消息。

inline

尝试内联指定的方法。

log

排除-XX:+LogCompilation除指定方法之外的所有方法的编译日志记录(包含选项)。默认情况下,对所有编译的方法执行日志记录。

option

该命令可用于将JIT编译选项传递给指定的方法,代替最后一个参数(选项)。编译选项设置在方法名后面。例如,要启用该类BlockLayoutByFrequencyappend()方法的选项StringBuffer,请使用以下命令:

-XX:CompileCommand =选项,爪哇/郎/的StringBuffer.append,BlockLayoutByFrequency

您可以指定多个编译选项,用逗号或空格分隔。

print

在编译指定的方法后打印生成的汇编代码。

quiet

不要打印编译命令。默认情况下,使用 – XX:CompileCommand选项指定的命令被打印出来; 例如,如果您从编译中排除该类的indexOf()方法String,则以下将打印到标准输出:

CompilerOracle:排除java / lang / String.indexOf

您可以通过-XX:CompileCommand=quiet在其他选项之前指定该选项来禁止此-XX:CompileCommand操作。

-XX:CompileCommandFile = filename

设置读取JIT编译器命令的文件。默认情况下,该.hotspot_compiler文件用于存储JIT编译器执行的命令。

命令文件中的每一行表示使用该命令的命令,类名称和方法名称。例如,此行打印类的toString()方法的汇编代码String

打印java / lang / String toString

有关指定JIT编译器在方法上执行的命令的更多信息,请参阅-XX:CompileCommand选项。

-XX:CompileOnly =methods

设置应限制编译的方法列表(以逗号分隔)。只有指定的方法将被编译。使用完整的类名(包括包和子包)指定每个方法。例如,为了仅编译length()所述的方法String类和size()所述的方法List类,使用以下:

-XX:CompileOnly =java/lang/ string.length,java/util/List.size

请注意,指定了完整的类名称,包括用slash(/)分隔的所有包和子包。为了便于剪切和粘贴操作,还可以使用由产生的方法名称格式-XX:+PrintCompilation-XX:+LogCompilation选项:

-XX:CompileOnly = java.lang.String::length,java.util.List::size

虽然不支持通配符,但您可以仅指定类或程序包名称来编译该类或程序包中的所有方法,以及仅指定在任何类中使用此名称编译方法的方法:

-XX:CompileOnly = java/lang/String 
-XX:CompileOnly = java/lang 
-XX:CompileOnly = .length
-XX:CompileThreshold = invocations

在编译之前设置解释方法调用的次数。默认情况下,在服务器JVM中,JIT编译器执行10,000个解释方法调用,以收集有效编译的信息。对于客户端JVM,默认设置为1,500个调用。当启用分层编译时,忽略此选项; 看到选项-XX:+TieredCompilation。以下示例显示如何将解释方法调用的数量设置为5,000:

-XX:CompileThreshold = 5000

您可以通过指定-Xcomp选项来完全禁用Java编译方法的解释。

-XX:+ DoEscapeAnalysis

启用逃逸分析。默认情况下启用此选项。要禁用使用逸出分析,请指定-XX:-DoEscapeAnalysis。只有Java HotSpot Server VM支持此选项。

-XX:InitialCodeCacheSize = size

设置初始代码缓存大小(以字节为单位)。附加信件kK指示千字节,mM指示兆字节,gG表示千兆字节。默认值设置为500 KB。初始代码缓存大小应不小于系统的最小内存页大小。以下示例显示如何将初始代码缓存大小设置为32 KB:

-XX:InitialCodeCacheSize = 32K
-XX:+内嵌

启用方法内联。此选项默认启用以提高性能。要禁用方法内联,请指定-XX:-Inline

-XX:InlineSmallCode = size

设置应该内联的编译方法的最大代码大小(以字节为单位)。附加信件kK指示千字节,mM指示兆字节,gG表示千兆字节。只有尺寸小于指定大小的编译方法才会被内联。默认情况下,最大代码大小设置为1000字节:

-XX:InlineSmallCode = 1000
-XX:+ LogCompilation

将编译活动记录到hotspot.log当前工作目录中命名的文件中。您可以使用该-XX:LogFile选项指定其他日志文件路径和名称。

默认情况下,禁用此选项,并且不记录编译活动。该-XX:+LogCompilation选项必须与-XX:UnlockDiagnosticVMOptions解锁诊断JVM选项的选项一起使用。

每次使用该-XX:+PrintCompilation选项编译方法时,都可以启用详细诊断输出,并将消息打印到控制台。

-XX:MaxInlineSize = size

设置要内联的方法的最大字节码大小(以字节为单位)。附加信件kK指示千字节,mM指示兆字节,gG表示千兆字节。默认情况下,最大字节码大小设置为35字节:

-XX:MaxInlineSize = 35
-XX:MaxNodeLimit = nodes

设置在单个方法编译期间要使用的最大节点数。默认情况下,最大节点数设置为65,000:

-XX:MaxNodeLimit = 65000
-XX:MaxTrivialSize = size

设置要内联的简单方法的最大字节码大小(以字节为单位)。附加信件kK指示千字节,mM指示兆字节,gG表示千兆字节。默认情况下,一个简单方法的最大字节码大小设置为6个字节:

-XX:MaxTrivialSize = 6
-XX:+ OptimizeStringConcat

实现级联String操作的优化。默认情况下启用此选项。要禁用级联String操作的优化,请指定-XX:-OptimizeStringConcat。只有Java HotSpot Server VM支持此选项。

-XX:+ PrintAssembly

通过使用外部disassembler.so库来启用字节码和本机方法的汇编代码的打印。这使您可以看到生成的代码,这可能有助于您诊断性能问题。

默认情况下,禁用此选项,并且未打印汇编代码。该-XX:+PrintAssembly选项必须与-XX:UnlockDiagnosticVMOptions解锁诊断JVM选项的选项一起使用。

-XX:+ PrintCompilation

每次编译方法时,通过将消息打印到控制台,启用来自JVM的详细诊断输出。这使您可以看到实际编译的方法。默认情况下,禁用此选项,并且不打印诊断输出。

您还可以使用该-XX:+LogCompilation选项将编译活动记录到文件。

-XX:+ PrintInlining

启用内联决定的打印。这使您可以看到哪些方法内联。

默认情况下禁用此选项,并且不打印内联信息。该-XX:+PrintInlining选项必须与-XX:+UnlockDiagnosticVMOptions解锁诊断JVM选项的选项一起使用。

-XX:ReservedCodeCacheSize = size

设置JIT编译代码的最大代码高速缓存大小(以字节为单位)。附加信件kK指示千字节,mM指示兆字节,gG表示千兆字节。默认的最大代码缓存大小为240 MB; 如果使用该选项禁用分层编译-XX:-TieredCompilation,则默认大小为48 MB。此选项的限制为2 GB; 否则会产生错误。最大代码缓存大小不应小于初始代码缓存大小; 看到选项-XX:InitialCodeCacheSize。此选项相当于-Xmaxjitcodesize

-XX:RTMAbortRatio = abort_ratio

RTM中止比率被指定为所有执行的RTM事务的百分比(%)。如果一些被中止的事务变得大于该比率,那么编译的代码将被去优化。-XX:+UseRTMDeopt启用该选项时使用此比率。此选项的默认值为50.这意味着如果所有事务的50%中止,编译后的代码将被优化。

-XX:RTMRetryCount = number_of_retries

当RTM锁定代码中止或繁忙时,将重试此选项指定的次数,然后再回到正常的锁定机制。该选项的默认值为5. -XX:UseRTMLocking必须启用该选项。

-XX:-TieredCompilation

禁用分层编译的使用。默认情况下,启用此选项。只有Java HotSpot Server VM支持此选项。

-XX:+ UseAES

支持针对Intel,AMD和SPARC硬件的基于硬件的AES内在函数。Intel Westmere(2010年及更早版本),AMD Bulldozer(2011和更新版)以及SPARC(T4及更高版本)都是受支持的硬件。UseAES与UseAESIntrinsics结合使用。

-XX:+ UseAESIntrinsics

UseAES和UseAESIntrinsics标志默认情况下启用,仅支持32位和64位Java HotSpot Server VM。要禁用基于硬件的AES内在函数,请指定-XX:-UseAES -XX:-UseAESIntrinsics。例如,要启用硬件AES,请使用以下标志:

-XX:+ UseAES -XX:+ UseAESIntrinsics

要支持UseAES和UseAESIntrinsics标志用于32位和64位使用-server选项,请选择Java HotSpot Server VM。客户端VM不支持这些标志。

-XX:+ UseCodeCacheFlushing

在关闭编译器之前启用代码缓存的刷新。默认情况下启用此选项。要在关闭编译器之前禁用代码缓存的刷新,请指定-XX:-UseCodeCacheFlushing

-XX:+ UseCondCardMark

在更新卡片表之前,可以检查该卡是否已被标记。默认情况下禁用此选项,只能在具有多个套接字的机器上使用该选项,从而提高依赖并发操作的Java应用程序的性能。只有Java HotSpot Server VM支持此选项。

-XX:+ UseRTMDeopt

根据中止比例自动调整RTM锁定。该比率由-XX:RTMAbortRatio选项指定。如果中止事务的数量超过中止比率,则包含该锁的方法将被去优化,并将所有锁重新编译为普通锁。默认情况下禁用此选项。-XX:+UseRTMLocking必须启用该选项。

-XX:+ UseRTMLocking

为所有充气锁生成受限制的事务内存(RTM)锁定代码,正常锁定机制作为后备处理程序。默认情况下禁用此选项。与RTM相关的选项仅适用于支持事务同步扩展(TSX)的x86 CPU上的Java HotSpot Server VM。

RTM是英特尔TSX的一部分,它是一个x86指令集扩展,有助于创建多线程应用程序。RTM引入了新的指示XBEGINXABORTXEND,和XTEST。该指令XBEGINXEND指令包含一组要作为事务运行的指令。如果在运行事务时没有发现任何冲突,则内存和寄存器修改将在指令中一起XEND提交。该XABORT指令可用于明确地中止一个事务以及XEND用于检查一组指令是否在事务中运行的指令。

当另一个线程尝试访问相同的事务时,事务的锁定会被膨胀,从而阻止最初未请求访问该事务的线程。RTM要求在事务中止或失败的情况下指定后备操作集。RTM锁是一个被委派给TSX系统的锁。

RTM可以在关键区域(这是不能被多个线程同时访问的代码)的高度竞争的锁中提高性能。RTM还提高了粗粒度锁定的性能,这通常在多线程应用程序中性能不佳。(粗粒锁定是长时间保持锁定的策略,以最大限度地减少锁和释放锁的开销,而细粒度锁定是通过仅在必要时锁定并尽快解锁来实现最大并行度的策略。 )而且,对于由不同线程使用的轻量级的锁,RTM可以减少虚拟高速缓存行共享,也称为缓存线乒乓。当来自不同处理器的多个线程正在访问不同的资源时,但资源共享相同的缓存行。结果,处理器反复使其他处理器的高速缓存行无效,这迫使他们从主存储器而不是其高速缓存读取。

-XX:+UseSHA

Enables hardware-based intrinsics for SHA crypto hash functions for SPARC hardware. UseSHA is used in conjunction with the UseSHA1IntrinsicsUseSHA256Intrinsics, and UseSHA512Intrinsics options.

The UseSHA and UseSHA*Intrinsics flags are enabled by default, and are supported only for Java HotSpot Server VM 64-bit on SPARC T4 and newer.

This feature is only applicable when using the sun.security.provider.Sun provider for SHA operations.

To disable all hardware-based SHA intrinsics, specify -XX:-UseSHA. To disable only a particular SHA intrinsic, use the appropriate corresponding option. For example: -XX:-UseSHA256Intrinsics.

-XX:+UseSHA1Intrinsics

Enables intrinsics for SHA-1 crypto hash function.

-XX:+UseSHA256Intrinsics

Enables intrinsics for SHA-224 and SHA-256 crypto hash functions.

-XX:+UseSHA512Intrinsics

Enables intrinsics for SHA-384 and SHA-512 crypto hash functions.

-XX:+UseSuperWord

Enables the transformation of scalar operations into superword operations. This option is enabled by default. To disable the transformation of scalar operations into superword operations, specify -XX:-UseSuperWord. Only the Java HotSpot Server VM supports this option.

Advanced Serviceability Options

These options provide the ability to gather system information and perform extensive debugging.

-XX:+ExtendedDTraceProbes

Enables additional dtrace tool probes that impact the performance. By default, this option is disabled and dtrace performs only standard probes.

-XX:+HeapDumpOnOutOfMemory

Enables the dumping of the Java heap to a file in the current directory by using the heap profiler (HPROF) when a java.lang.OutOfMemoryError exception is thrown. You can explicitly set the heap dump file path and name using the -XX:HeapDumpPath option. By default, this option is disabled and the heap is not dumped when an OutOfMemoryError exception is thrown.

-XX:HeapDumpPath=path

Sets the path and file name for writing the heap dump provided by the heap profiler (HPROF) when the -XX:+HeapDumpOnOutOfMemoryError option is set. By default, the file is created in the current working directory, and it is named java_pidpid.hprof where pid is the identifier of the process that caused the error. The following example shows how to set the default file explicitly (%p represents the current process identificator):

-XX:HeapDumpPath=./java_pid%p.hprof

The following example shows how to set the heap dump file to /var/log/java/java_heapdump.hprof:

-XX:HeapDumpPath=/var/log/java/java_heapdump.hprof
-XX:LogFile=path

Sets the path and file name where log data is written. By default, the file is created in the current working directory, and it is named hotspot.log.

The following example shows how to set the log file to /var/log/java/hotspot.log:

-XX:LogFile=/var/log/java/hotspot.log
-XX:+PrintClassHistogram

Enables printing of a class instance histogram after a Control+C event (SIGTERM). By default, this option is disabled.

Setting this option is equivalent to running the jmap -histo command, or the jcmd pid GC.class_histogram command, where pid is the current Java process identifier.

-XX:+PrintConcurrentLocks

Enables printing of java.util.concurrent locks after a Control+C event (SIGTERM). By default, this option is disabled.

Setting this option is equivalent to running the jstack -l command or the jcmd pid Thread.print -l command, where pid is the current Java process identifier.

-XX:+UnlockDiagnosticVMOptions

Unlocks the options intended for diagnosing the JVM. By default, this option is disabled and diagnostic options are not available.

Advanced Garbage Collection Options

These options control how garbage collection (GC) is performed by the Java HotSpot VM.

-XX:+AggressiveHeap

Enables Java heap optimization. This sets various parameters to be optimal for long-running jobs with intensive memory allocation, based on the configuration of the computer (RAM and CPU). By default, the option is disabled and the heap is not optimized.

-XX:+AlwaysPreTouch

Enables touching of every page on the Java heap during JVM initialization. This gets all pages into the memory before entering the main() method. The option can be used in testing to simulate a long-running system with all virtual memory mapped to physical memory. By default, this option is disabled and all pages are committed as JVM heap space fills.

-XX:+CMSClassUnloadingEnabled

Enables class unloading when using the concurrent mark-sweep (CMS) garbage collector. This option is enabled by default. To disable class unloading for the CMS garbage collector, specify -XX:-CMSClassUnloadingEnabled.

-XX:CMSExpAvgFactor=percent

Sets the percentage of time (0 to 100) used to weight the current sample when computing exponential averages for the concurrent collection statistics. By default, the exponential averages factor is set to 25%. The following example shows how to set the factor to 15%:

-XX:CMSExpAvgFactor=15

-XX:CMSInitiatingOccupancyFraction=percent

设置开始CMS收集周期的旧一代占有率(0到100)的百分比。默认值设置为-1。任何负值(包括默认值)意味着-XX:CMSTriggerRatio用于定义起始占用率的值。

以下示例显示如何将占用率设置为20%:

-XX:CMSInitiatingOccupancyFraction = 20

-XX:+ CMSScavengeBeforeRemark

在CMS注释步骤之前启用清理尝试。默认情况下,此选项被禁用。

-XX:CMSTriggerRatio = percent

设置在-XX:MinHeapFreeRatioCMS收集周期开始之前分配的值所指定值的百分比(0到100)。默认值设置为80%。

以下示例显示如何将占用率设置为75%:

-XX:CMSTriggerRatio = 75

-XX:ConcGCThreads = 线程

设置用于并发GC的线程数。默认值取决于JVM可用的CPU数量。

例如,要将并发GC的线程数设为2,请指定以下选项:

-XX:ConcGCThreads = 2

-XX:+ DisableExplicitGC

启用禁用处理呼叫的选项System.gc()。默认情况下,此选项被禁用,这意味着处理呼叫System.gc()。如果处理呼叫System.gc()被禁用,则JVM在必要时仍然执行GC。

-XX:+ ExplicitGCInvokesConcurrent

通过使用System.gc()请求启用并发GC 。默认情况下,此选项被禁用,只能与-XX:+UseConcMarkSweepGC选项一起启用。

-XX:+ ExplicitGCInvokesConcurrentAndUnloadsClasses

通过System.gc()在并发GC循环中使用请求和卸载来启用并发GC的调用。默认情况下,此选项被禁用,只能与-XX:+UseConcMarkSweepGC选项一起启用。

-XX:G1HeapRegionSize = size

使用垃圾回收(G1)收集器时,设置Java堆细分的区域的大小。该值可以在1 MB到32 MB之间。基于堆大小,人体工程学确定默认区域大小。

以下示例显示如何将细分的大小设置为16 MB:

-XX:G1HeapRegionSize =16米

-XX:+ G1PrintHeapRegions

可以打印分配哪些区域以及G1收集器回收的信息。默认情况下,此选项被禁用。

-XX:G1ReservePercent = percent

设置保留为假天花板的堆(0到50)的百分比,以减少G1收集器的升级失败的可能性。默认情况下,此选项设置为10%。

以下示例显示如何将保留堆设置为20%:

-XX:G1ReservePercent = 20

-XX:InitialHeapSize = size

设置内存分配池的初始大小(以字节为单位)。此值必须为0,或1024或大于1 MB的倍数。附加信件kK指示千字节,mM指示兆字节,gG表示千兆字节。默认值是基于系统配置在运行时选择的。见一节“人体工程学” 的Java SE HotSpot虚拟机垃圾收集调优指南http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html

以下示例显示如何使用各种单位将分配的内存大小设置为6 MB:

-XX:InitialHeapSize = 6291456 
-XX:InitialHeapSize = 6144k 
-XX:InitialHeapSize = 6m

如果将此选项设置为0,则初始大小将被设置为为旧代和年轻一代分配的大小的总和。可以使用该-XX:NewSize选项设置年轻一代的堆大小。

-XX:InitialSurvivorRatio = ratio

设置吞吐量垃圾收集器使用的初始幸存者空间比(由-XX:+UseParallelGC/或 – XX:+UseParallelOldGC选项启用)。默认情况下,通过使用-XX:+UseParallelGC-XX:+UseParallelOldGCoptions 可以使用吞吐量垃圾收集器来启用自适应大小,并且从初始值开始,根据应用程序行为调整幸存者空间。如果禁用自适应大小(使用-XX:-UseAdaptiveSizePolicy选项),则-XX:SurvivorRatio应该使用该选项来设置整个执行应用程序的幸存空间的大小。

以下公式可用于根据年轻一代(Y)的大小和初始幸存者空间比(R)计算幸存者空间(S)的初始大小:

S = Y /(R + 2)

方程式中的2表示两个幸存者空间。初始幸存者空间比指定的值越大,初始幸存者空间大小越小。

默认情况下,初始幸存者空间比设置为8.如果使用年轻一代空间大小的默认值(2 MB),则幸存者空间的初始大小将为0.2 MB。

以下示例显示如何将初始幸存者空间比设置为4:

-XX:InitialSurvivorRatio = 4
-XX:InitiateHeapOccupancyPercent = percent

设置开始并发GC循环的堆占用百分比(0到100)。垃圾收集器使用的触发并发GC循环,基于整个堆的占用,而不仅仅是一代(例如,G1垃圾收集器)。

默认情况下,启动值设置为45%。值为0表示不间断GC循环。以下示例显示如何将启动堆占用率设置为75%:

-XX:InitiatingHeapOccupancyPercent = 75
-XX:MaxGCPauseMillis =time

设置最大GC暂停时间的目标(以毫秒为单位)。这是一个软性目标,JVM将尽力实现。默认情况下,没有最大暂停时间值。

以下示例显示如何将最大目标暂停时间设置为500 ms:

-XX:MaxGCPauseMillis = 500
-XX:MaxHeapSize = size

Sets the maximum size (in byes) of the memory allocation pool. This value must be a multiple of 1024 and greater than 2 MB. Append the letter k or K to indicate kilobytes, m or M to indicate megabytes, g or G to indicate gigabytes. The default value is chosen at runtime based on system configuration. For server deployments, -XX:InitialHeapSize and -XX:MaxHeapSize are often set to the same value. See the section “Ergonomics” in Java SE HotSpot Virtual Machine Garbage Collection Tuning Guide at http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html.

The following examples show how to set the maximum allowed size of allocated memory to 80 MB using various units:

-XX:MaxHeapSize=83886080
-XX:MaxHeapSize=81920k
-XX:MaxHeapSize=80m

On Oracle Solaris 7 and Oracle Solaris 8 SPARC platforms, the upper limit for this value is approximately 4,000 MB minus overhead amounts. On Oracle Solaris 2.6 and x86 platforms, the upper limit is approximately 2,000 MB minus overhead amounts. On Linux platforms, the upper limit is approximately 2,000 MB minus overhead amounts.

The -XX:MaxHeapSize option is equivalent to -Xmx.

-XX:MaxHeapFreeRatio=percent

Sets the maximum allowed percentage of free heap space (0 to 100) after a GC event. If free heap space expands above this value, then the heap will be shrunk. By default, this value is set to 70%.

The following example shows how to set the maximum free heap ratio to 75%:

-XX:MaxHeapFreeRatio=75
-XX:MaxMetaspaceSize=size

Sets the maximum amount of native memory that can be allocated for class metadata. By default, the size is not limited. The amount of metadata for an application depends on the application itself, other running applications, and the amount of memory available on the system.

The following example shows how to set the maximum class metadata size to 256 MB:

-XX:MaxMetaspaceSize=256m
-XX:MaxNewSize=size

Sets the maximum size (in bytes) of the heap for the young generation (nursery). The default value is set ergonomically.

-XX:MaxTenuringThreshold=threshold

Sets the maximum tenuring threshold for use in adaptive GC sizing. The largest value is 15. The default value is 15 for the parallel (throughput) collector, and 6 for the CMS collector.

The following example shows how to set the maximum tenuring threshold to 10:

-XX:MaxTenuringThreshold=10
-XX:MetaspaceSize=size

Sets the size of the allocated class metadata space that will trigger a garbage collection the first time it is exceeded. This threshold for a garbage collection is increased or decreased depending on the amount of metadata used. The default size depends on the platform.

-XX:MinHeapFreeRatio=percent

Sets the minimum allowed percentage of free heap space (0 to 100) after a GC event. If free heap space falls below this value, then the heap will be expanded. By default, this value is set to 40%.

The following example shows how to set the minimum free heap ratio to 25%:

-XX:MinHeapFreeRatio=25
-XX:NewRatio=ratio

Sets the ratio between young and old generation sizes. By default, this option is set to 2. The following example shows how to set the young/old ratio to 1:

-XX:NewRatio=1
-XX:NewSize=size

Sets the initial size (in bytes) of the heap for the young generation (nursery). Append the letter k or K to indicate kilobytes, m or M to indicate megabytes, g or G to indicate gigabytes.

堆的年轻一代区域用于新对象。GC在这个地区比其他地区更频繁地进行。如果年轻一代的规模太小,那么将会执行大量的次要地理信息系统。如果尺寸太大,那么只能执行完整的GC,这可能需要很长时间才能完成。Oracle建议您将年轻一代的大小保持在整个堆大小的一半到四分之一之间。

以下示例显示如何使用各种单位将年轻一代的初始大小设置为256 MB:

-XX:NewSize = 256m 
-XX:NewSize = 262144k 
-XX:NewSize = 268435456

-XX:NewSize选项相当于-Xmn

-XX:ParallelGCThreads =threads

设置用于年轻和旧世代中并行垃圾收集的线程数。默认值取决于JVM可用的CPU数量。

例如,要将并行GC的线程数设置为2,请指定以下选项:

-XX:ParallelGCThreads = 2
-XX:+ ParallelRefProcEnabled

启用并行参考处理。默认情况下,此选项被禁用。

-XX:+ PrintAdaptiveSizePolicy

启用有关自适应生成大小的信息的打印。默认情况下,此选项被禁用。

-XX:+ PrintGC

启用在每个GC打印邮件。默认情况下,此选项被禁用。

-XX:+ PrintGCApplicationConcurrentTime

启用自上次暂停以来经过的时间(例如,GC暂停)的打印。默认情况下,此选项被禁用。

-XX:+ PrintGCApplicationStoppedTime

启用暂停(例如,GC暂停)持续多少时间的打印。默认情况下,此选项被禁用。

-XX:+ PrintGCDateStamps

启用每个GC打印日期戳。默认情况下,此选项被禁用。

-XX:+PrintGCDetails

启用每个GC打印详细信息。默认情况下,此选项被禁用。

-XX:+ PrintGCTaskTimeStamps

为每个GC工作者线程任务打印时间戳。默认情况下,此选项被禁用。

-XX:+ PrintGCTimeStamps

启用在每个GC打印时间戳。默认情况下,此选项被禁用。

-XX:+ PrintStringDeduplicationStatistics

打印详细的重复数据删除统计信息。默认情况下,此选项被禁用。看到-XX:+UseStringDeduplication选项。

-XX:+ PrintTenuringDistribution

可以打印终身年龄信息。以下是输出示例:

期望的幸存者大小48286924字节,新阈值10(最大10)
- 年龄1:28992024字节,28992024总计
2:1366864字节,30358888总计
3:1425912字节,31784800总计
...

年龄1的对象是最年轻的幸存者(他们是在以前的扫除之后创造的,在最新的清除之后幸存下来,并从伊甸园迁到幸存者的空间)。年龄2的物体幸存下来的两个清除(在第二次清扫期间,他们从一个幸存者的空间复制到下一个)。等等。

在前面的例子中,28 992 024个字节幸免于一次清除,并从eden复制到幸存者空间,1 366 864个字节被2岁以下的对象占用。每一行的第三个值是年龄n或减。

默认情况下,此选项被禁用。

-XX:+ ScavengeBeforeFullGC

在每个完整GC之前启用年轻一代的GC。默认情况下启用此选项。Oracle建议您不要禁用它,因为在完整的GC之前清理年轻一代可以减少从旧一代空间到年轻一代空间可达到的对象数量。要在每个完整GC之前禁用年轻一代的GC,请指定-XX:-ScavengeBeforeFullGC

-XX:SoftRefLRUPolicyMSPerMB =time

设置在上次引用之后,可轻松达到的对象在堆上保持活动的时间量(以毫秒为单位)。默认值是堆中每空闲兆字节的生命周期的1秒。该-XX:SoftRefLRUPolicyMSPerMB选项接受表示每兆字节当前堆大小(对于Java HotSpot Client VM)的毫秒数或最大可能堆大小(适用于Java HotSpot Server VM)的整数值。这种差异意味着客户端VM倾向于刷新软引用而不是扩展堆,而服务器虚拟机倾向于增加堆而不是刷新软引用。在后一种情况下,该-Xmx选项的值对于软引用的垃圾收集速度有显着影响。

以下示例显示如何将值设置为2.5秒:

-XX:SoftRefLRUPolicyMSPerMB = 2500
-XX:StringDeduplicationAgeThreshold =threshold

String达到指定年龄的对象被认为是重复数据删除的候选者。对象的年龄是衡量垃圾收集次数的几倍。这有时被称为终身教育; 看到-XX:+PrintTenuringDistribution选项。请注意,String在达到此年龄之前升级到旧堆区域的对象始终被认为是重复数据删除的候选对象。该选项的默认值为3。看到-XX:+UseStringDeduplication选项。

-XX:SurvivorRatio = ratio

设置eden空间大小和幸存者空间大小之间的比例。默认情况下,此选项设置为8.以下示例显示如何将eden /幸存者空间比设置为4:

-XX:SurvivorRatio = 4
-XX:TargetSurvivorRatio = percent

Sets the desired percentage of survivor space (0 to 100) used after young garbage collection. By default, this option is set to 50%.

The following example shows how to set the target survivor space ratio to 30%:

-XX:TargetSurvivorRatio=30
-XX:TLABSize=size

Sets the initial size (in bytes) of a thread-local allocation buffer (TLAB). Append the letter k or K to indicate kilobytes, m or M to indicate megabytes, g or G to indicate gigabytes. If this option is set to 0, then the JVM chooses the initial size automatically.

The following example shows how to set the initial TLAB size to 512 KB:

-XX:TLABSize=512k
-XX:+UseAdaptiveSizePolicy

使用自适应生成大小调整。默认情况下启用此选项。要禁用自适应生成大小,请指定-XX:-UseAdaptiveSizePolicy并明确设置内存分配池的大小(请参阅-XX:SurvivorRatio选项)。

-XX:+ UseCMSInitiatingOccupancyOnly

允许使用占用值作为启动CMS收集器的唯一标准。默认情况下,此选项被禁用,并且可以使用其他标准。

-XX:+ UseConcMarkSweepGC

启用CMS旧垃圾收集器的使用。Oracle建议您在吞吐量(-XX:+UseParallelGC)垃圾收集器无法满足应用程序延迟要求时,使用CMS垃圾收集器。G1垃圾收集器(-XX:+UseG1GC)是另一个选择。

默认情况下,禁用此选项,并根据机器的配置和JVM的类型自动选择收集器。启用此选项后,该-XX:+UseParNewGC选项将自动设置,您不应禁用该选项,因为在JDK 8中不推荐使用以下组合的选项-XX:+UseConcMarkSweepGC -XX:-UseParNewGC

-XX:+ UseG1GC

启用垃圾回收(G1)垃圾回收器。它是一种服务器式垃圾回收器,面向具有大量RAM的多处理器机器。它可以高概率地满足GC暂停时间目标,同时保持良好的吞吐量。推荐使用G1收集器,用于需要大堆(大小约6 GB或更大)的应用,具有有限的GC等待时间要求(稳定且可预测的暂停时间低于0.5秒)。

默认情况下,禁用此选项,并根据机器的配置和JVM的类型自动选择收集器。

-XX:+ UseGCOverheadLimit

启用在OutOfMemoryError引发异常之前限制JVM在GC上花费的时间比例的策略。默认情况下启用此选项,并且并行GC将抛出OutOfMemoryError总共时间的98%用于垃圾回收,并且小于2%的堆将被恢复。堆小时,此功能可用于防止应用程序长时间运行,几乎没有进展。要禁用此选项,请指定-XX:-UseGCOverheadLimit

-XX:+ UseNUMA

通过增加应用程序使用较低延迟的内存,实现具有不均匀内存架构(NUMA)的机器上的应用程序的性能优化。默认情况下,禁用此选项,并且不会对NUMA进行优化。该选项仅在使用并行垃圾收集器时可用(-XX:+UseParallelGC)。

-XX:+ UseParallelGC

使用并行扫描垃圾收集器(也称为吞吐量收集器)通过利用多个处理器来提高应用程序的性能。

默认情况下,禁用此选项,并根据机器的配置和JVM的类型自动选择收集器。如果启用,则该-XX:+UseParallelOldGC选项将自动启用,除非您明确禁用该选项。

-XX:+ UseParallelOldGC

使用并行垃圾收集器来完成GC。默认情况下,此选项被禁用。启用它将自动启用该-XX:+UseParallelGC选项。

-XX:+ UseParNewGC

允许在年轻一代中使用并行线程进行收集。默认情况下,此选项被禁用。设置-XX:+UseConcMarkSweepGC选项时会自动启用。在JDK 8中-XX:+UseParNewGC不推荐使用不带该-XX:+UseConcMarkSweepGC选项的选项。

-XX:+ UseSerialGC

启用串行垃圾收集器的使用。这通常是小而简单应用程序的最佳选择,不需要垃圾收集的任何特殊功能。默认情况下,禁用此选项,并根据机器的配置和JVM的类型自动选择收集器。

-XX:+ UseSHM

在Linux上,使JVM可以使用共享内存来设置大页面。

有关详细信息,请参阅“大页面”

-XX:+ UseStringDeduplication

启用字符串重复数据删除。默认情况下,此选项被禁用。要使用此选项,必须启用垃圾回收(G1)垃圾收集器。看到-XX:+UseG1GC选项。

字符串重复数据删除String通过利用许多String对象相同的事实来减少Java堆上对象的内存占用。而不是每个String对象指向自己的字符数组,相同的String对象可以指向并共享相同的字符数组。

-XX:+ UseTLAB

允许在年轻一代的空间中使用线程本地分配块(TLAB)。默认情况下启用此选项。要禁用TLAB的使用,请指定-XX:-UseTLAB

已弃用和已删除的选项

这些选项已包含在以前的版本中,但之后被认为是不必要的。

-Xincgc

启用增量垃圾收集。此选项在JDK 8中已被弃用,无需更换。

-Xrun libname

加载指定的调试/分析库。该选项被选项取代-agentlib

-XX:CMSIncrementalDutyCycle = percent

设置允许并发收集器运行的次要集合之间的时间百分比(0到100)。此选项在JDK 8中已被弃用,无需替换,因为该选项被弃用-XX:+CMSIncrementalMode

-XX:CMSIncrementalDutyCycleMin = percent

设置作为-XX:+CMSIncrementalPacing启用占空比下限的次要集合之间的时间百分比(0到100)。此选项在JDK 8中已被弃用,无需替换,因为该选项被弃用-XX:+CMSIncrementalMode

-XX:+ CMSIncrementalMode

启用CMS收集器的增量模式。此选项在JDK 8中已被弃用,无需替换,以及以其他选项开始CMSIncremental

-XX:CMSIncrementalOffset = percent

设置在次要集合之间的时间段内增量模式占空比向右移动的时间百分比(0到100)。此选项在JDK 8中已被弃用,无需替换,因为该选项被弃用-XX:+CMSIncrementalMode

-XX:+ CMSIncrementalPacing

根据JVM运行时收集的统计信息,可以自动调整增量模式占空比。此选项在JDK 8中已被弃用,无需替换,因为该选项被弃用-XX:+CMSIncrementalMode

-XX:CMSIncrementalSafetyFactor = percent

设置计算占空比时用于添加保守性的时间百分比(0到100)。此选项在JDK 8中已被弃用,无需替换,因为该选项被弃用-XX:+CMSIncrementalMode

-XX:CMSInitiatingPermOccupancyFraction = percent

设置启动GC的永久发电占用率(0到100)的百分比。此选项在JDK 8中已被弃用,无需更换。

-XX:MaxPermSize = size

设置最大的永久代大小(以字节为单位)。此选项已在JDK 8中弃用,并被该-XX:MaxMetaspaceSize选项取代。

-XX:PermSize = size

设置初始分配给的永久代的大小(以字节为单位),如果超过垃圾回收则触发垃圾回收。此选项已被取消JDK 8,并被该-XX:MetaspaceSize选项取代。

-XX:+ UseSplitVerifier

启用验证过程的拆分。默认情况下,此选项在以前的版本中启用,验证分为两个阶段:类型引用(由编译器执行)和类型检查(由JVM运行时执行)。此选项在JDK 8中已被弃用,默认情况下,验证已被拆分,无法禁用它。

-XX:+ UseStringCache

启用缓存通常分配的字符串。此选项已从JDK 8中删除,无需更换。

 

性能调优示例

以下示例说明如何使用实验性调优标志来优化吞吐量或提供较低的响应时间。

示例1 – 调整更高的吞吐量

java -d64 -server -XX:+ AggressiveOpts -XX:+ UseLargePages -Xmn10g -Xms26g -Xmx26g

示例2 - 调整响应时间较短
java -d64 -XX:+ UseG1GC -Xms26g Xmx26g -XX:MaxGCPauseMillis = 500 -XX:+ PrintGCTimeStamp

大页

也称为巨大页面,大页面是显着大于标准内存页面大小(根据处理器和操作系统而异)的内存页面。大页面优化处理器翻译后备缓冲区。

翻译后备缓冲区(TLB)是一种页面翻译缓存,保存最近使用的虚拟到物理地址转换。TLB是一个稀缺的系统资源。因为处理器必须从层次化的页表中读取,这可能需要多个存储器访问,TLB缺失可能是昂贵的。通过使用较大的内存页面大小,单个TLB条目可以表示较大的内存范围。对TLB的压力将更小,内存密集型应用程序可能具有更好的性能。

然而,大页面页面内存可能会对系统性能产生负面影响。例如,当应用程序固定大量内存时,可能会导致常规内存不足,并导致其他应用程序中的超量寻呼,并减缓整个系统。而且,一个长时间起来的系统可能会产生过多的碎片,这样就无法预留足够大的页面内存。当这种情况发生时,操作系统或JVM将恢复使用常规页面。

大页面支持

Solaris和Linux支持大页面。

的Solaris

Solaris 9及更高版本包括多页大小支持(MPSS); 不需要额外的配置。见http://www.oracle.com/technetwork/server-storage/solaris10/overview/solaris9-features-scalability-135663.html

Linux的

2.6内核支持大页面。一些供应商已经将代码转载到了基于2.4的版本。要检查您的系统是否可以支持大页面内存,请尝试以下操作:

#cat / proc / meminfo | grep Huge 
HugePages_Total:0 
HugePages_Free:0 
Hugepagesize:2048 kB

如果输出显示三个“巨大”变量,那么您的系统可以支持大页面内存,但需要配置。如果命令不打印,那么您的系统不支持大页面。要配置系统使用大页面内存,请登录root,然后按照下列步骤操作:

  1. 如果您使用该选项-XX:+UseSHM(而不是-XX:+UseHugeTLBFS),则增加该SHMMAX值。它必须大于Java堆大小。在具有4 GB物理RAM(或更小)的系统上,以下将使所有内存共享:

    #echo 4294967295> / proc / sys / kernel / shmmax
    
  2. 如果您使用该选项,-XX:+UseSHM或者-XX:+UseHugeTLBFS指定大页数。在下面的示例中,为大页面预留3 GB的4 GB系统(假定大页面大小为2048kB,则3 GB = 3 * 1024 MB = 3072 MB = 3072 * 1024 kB = 3145728 kB和3145728 kB / 2048 kB = 1536):

    #echo 1536> / proc / sys / vm / nr_hugepages
    

注意:

  • 请注意,/proc重新启动系统后,包含的值将重置,因此可能需要将其设置为初始化脚本(例如,rc.localsysctl.conf)。
  • 如果您配置(或调整大小)操作系统内核参数,/proc/sys/kernel/shmmax或者/proc/sys/vm/nr_hugepagesJava进程可能会分配除了Java堆之外的区域的大页面。这些步骤可以为以下区域分配大页面:

    • Java堆

    • 代码缓存

    • 并行GC的标记位图数据结构

    因此,如果将参数nr_hugepages配置为Java堆的大小,则JVM可能无法在大页面上分配代码缓存区域,因为这些区域的大小相当大。

应用程序类数据共享

应用程序类数据共享(AppCDS)扩展了CDS(见https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html),以从标准扩展目录(由系统属性指定java.ext.dirs;参见https://docs.oracle.com/javase/8/docs/technotes/guides/extensions/spec.html)和应用程序类路径(请参阅“设置类路径”)启用类以放置在共享存档。如果从应用程序类路径加载大量类,AppCDS将减少占用空间并减少应用程序的启动时间。

这是一个商业功能,需要您同时指定该-XX:+UnlockCommercialFeatures选项。这也是一个实验功能; 它可能会在将来的版本中改变。

创建共享存档文件,并使用它运行应用程序

以下步骤创建一个包含应用程序使用的所有类的共享存档文件test.Hello。最后一步使用共享存档文件运行应用程序。

  1. 创建应用程序使用的所有类的列表test.Hello。以下命令创建一个名为的文件hello.classlist,其中包含此应用程序使用的所有类的列表:

    java -Xshare:off -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hello.classlist -XX:+UseAppCDS -cp hello.jar test.Hello

    请注意,该-cp参数只能包含JAR文件; 该-XX:+UseAppCDS选项不支持包含目录名称的类路径。

  2. 创建一个名为的共享存档,hello.jsa其中包含以下所有类hello.classlist

    java -XX:+UnlockCommercialFeatures -Xshare:dump -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -XX:SharedClassListFile=hello.classlist -cp hello.jar

    请注意,-cp在归档创建时使用的参数必须与-cp运行时使用的参数相同(或前缀)。

  3. 使用test.Hello共享存档运行应用程序hello.jsa

    java -XX:+UnlockCommercialFeatures -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -cp hello.jar test.Hello

    确保您已指定选项-Xshare:on或 – Xshare:auto

  4. 验证应用test.Hello程序是否正在使用hello.jsa共享存档中包含的类:

    java -XX:+UnlockCommercialFeatures -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -cp hello.jar -verbose:class test.Hello

    此命令的输出应包含以下文本:

    Loaded test.Hello from shared objects file by sun/misc/Launcher$AppClassLoader

跨多个应用程序共享共享存档

您可以在具有完全相同的类路径或共享公共类路径前缀的多个应用程序进程之间共享相同的归档文件。这将减少内存使用,因为归档文件被内存映射到进程的地址空间。操作系统自动共享这些进程中的只读页面。

以下步骤创建两个应用程序HelloHi可以使用的共享存档。

  1. 创建应用程序使用的所有类的列表Hello和应用程序的另一个列表Hi

    java -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hello.classlist -XX:+UseAppCDS -cp common.jar:hello.jar Hello

    java -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hi.classlist -XX:+UseAppCDS -cp common.jar:hi.jar Hi

    请注意,由于HelloHi应用程序都有一个共同的类路径前缀(包括他们的类路径开始common.jar),这两个应用程序可以共享一个共享的归档文件。

  2. 创建共享共享存档文件的所有应用程序使用的类的单个列表。

    以下命令将文件hello.classlisthi.classlist一个文件相结合common.classlist

    cat hello.classlist hi.classlist > common.classlist

  3. 创建一个名为的共享存档,common.jsa其中包含以下所有类common.classlist

    java -XX:+UnlockCommercialFeatures -Xshare:dump -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -XX:SharedClassListFile=common.classlist -cp common.jar

    所述的值-cp的参数是通过共享的公共类路径前缀HelloHi应用程序。

  4. 使用相同的共享存档运行Hello和应用Hi程序:

    java -XX:+UnlockCommercialFeatures -Xshare:on -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -cp common.jar:hello.jar Hello

    java -XX:+UnlockCommercialFeatures -Xshare:on -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -cp common.jar:hi.jar Hi

版权声明:本文为benwu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/benwu/articles/6921047.html