Java8 官方jvm 标准参考 -XX 配置参数详细信息

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

概要

java [ 选项 ] 类名 [ args ]

java [ 选项 ] -jar 文件名 [ args ]

选项

命令行选项用空格分隔。请参阅选项。

班级名称

要启动的类的名称。

文档名称

要调用的Java归档(JAR)文件的名称。仅与-jar选件一起使用。

args

传递给main()方法的参数以空格分隔。

描述

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

公共静态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命令支持各种选项,这些选项可以分为以下几类:

  • 标准选项

  • 非标准选项

  • 高级运行时选项

  • 高级JIT编译器选项

  • 先进的可维修性选项

  • 高级垃圾收集选项

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

非标准选项是特定于Java HotSpot虚拟机的通用选项,因此不能保证所有JVM实现都支持它们,并且它们可能会发生变化。这些选项以开头-X

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

为了跟踪最新版本中不建议使用或删除的选项,文档末尾有一个名为“ 不建议使用和删除的选项”的部分。

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

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

标准选项

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

-agentlib:libname [= 选项 ]

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

如果-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调试线协议(JDWP)库并侦听端口8000上的套接字连接,从而在主类加载之前挂起JVM:

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

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

  • java.lang.instrument在包描述http://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html

  • JVM工具界面指南中的代理程序命令行选项位于 http://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#starting

-agentpath:路径名 [= 选项 ]

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

-客户

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

有关默认的JVM选择,请参见位于以下位置的服务器级计算机检测:
http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html

-D 属性 = 

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

-d32

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

-d64

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

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

-disableassertions [:[ 包名 ] ... |:类名 ]

-天[:[ 包名 ] ... |:类名 ]

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

不带参数的-disableassertions-da)禁用所有程序包和类中的断言。在packagename参数以结尾的情况下...,此开关将禁用指定程序包和任何子程序包中的断言。如果参数为simple ...,则该开关将禁用当前工作目录中未命名包中的断言。使用classname参数,该开关将禁用指定类中的断言。

-disableassertions-da)选项适用于所有的类加载器和系统类(其中没有一个类加载器)。此规则有一个例外:如果未提供任何选项,则该选项不适用于系统类。这使得禁用除系统类之外的所有类中的断言变得容易。该-disablesystemassertions选项使您可以禁用所有系统类中的断言。

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

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

-disablesystemassertions

-dsa

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

-enableassertions [:[ 包名 ] ... |:类名 ]

-ea [:[ 包名 ] ... |:类名 ]

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

没有参数,-enableassertions-ea)启用所有包和类中的断言。在packagename参数以结尾的情况下...,此开关将在指定的包和任何子包中启用断言。如果参数为simple ...,那么该开关将在当前工作目录的未命名包中启用断言。使用classname参数,该开关将启用指定类中的断言。

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

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

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

-enablesystemassertions

-esa

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

-救命

-?

显示java命令的用法信息,而无需实际运行JVM。

-jar 文件名

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

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

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

  • jar(1)

  • Java存档(JAR)文件指南位于 http://docs.oracle.com/javase/8/docs/technotes/guides/jar/index.html

  • 课程:将程序打包为JAR文件
    http://docs.oracle.com/javase/tutorial/deployment/jar/index.html

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

-无限制限制搜索

从版本搜索中排除用户专用的JRE。

-服务器

选择Java HotSpot服务器VM。JDK的64位版本仅支持服务器VM,因此在这种情况下,该选项为隐式的。

有关默认的JVM选择,请参见位于以下位置的服务器级计算机检测:
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本机接口(JNI)活动的信息。

-版

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

版本发布

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

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

版本:“ 1.6.0_13 1.6 *和1.6.0_10 +”

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

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

非标准选项

这些选项是特定于Java HotSpot虚拟机的通用选项。

-X

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

-X批次

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

此选项等效于-XX:-BackgroundCompilation

-Xbootclasspath:路径

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

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

-Xbootclasspath / a:路径

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

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

-Xbootclasspath / p:路径

指定目录,JAR文件和ZIP归档文件的列表,并用冒号(:)分隔,以使其位于默认引导程序类路径的最前面。

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

-Xcheck:jni

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

-Xcomp

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

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

-Xdebug

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

-Xdiag

显示其他诊断消息。

-未来

启用严格的类文件格式检查,以强制严格符合类文件格式规范。鼓励开发人员在开发新代码时使用此标志,因为在以后的版本中,更严格的检查将成为默认设置。

-Xint

以仅解释模式运行应用程序。禁止对本机代码进行编译,并且所有字节码均由解释器执行。即时(JIT)编译器提供的性能优势在此模式下不存在。

-Xinternalversion

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

-Xloggc:文件名

设置应将详细的GC事件信息重定向到该文件以进行日志记录的文件。从-verbose:gc每个记录的事件之前的第一个GC事件开始,写入此文件的信息与经过时间后的输出类似。如果两者都使用同一命令给出,则该-Xloggc选项将覆盖。-verbose:gcjava

例:

-Xloggc:垃圾收集.log

-Xmaxjitcodesize = 大小

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

-Xmaxjitcodesize = 240m

此选项等效于-XX:ReservedCodeCacheSize

-Xmixed

由解释器执行所有字节码,但热方法除外,后者被编译为本机代码。

-Xmn 大小

设置年轻一代(苗圃)的堆的初始大小和最大大小(以字节为单位)。追加字母kK表示千字节,mM表示兆字节,gG表示千兆字节。

堆的年轻代区域用于新对象。与其他区域相比,在该区域执行GC的频率更高。如果年轻一代的大小太小,则会执行许多次要的垃圾回收。如果大小太大,那么将仅执行完整的垃圾收集,这可能需要很长时间才能完成。Oracle建议您将年轻代的大小保持在整个堆大小的一半到四分之一之间。

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

-Xmn256m 
-Xmn262144k 
-Xmn268435456

取而代之的是的-Xmn选项组中的两个堆年轻一代的初始和最大大小,您可以使用-XX:NewSize设置初始大小和-XX:MaxNewSize设置的最大尺寸。

-Xms 大小

设置堆的初始大小(以字节为单位)。此值必须是1024的倍数且大于1 MB。追加字母kK表示千字节,mM表示兆字节,gG表示千兆字节。

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

-Xms6291456 
-Xms6144k 
-Xms6m

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

-Xmx 大小

指定内存分配池的最大大小(以字节为单位)。此值必须是1024的倍数且大于2 MB。追加字母kK表示千字节,mM表示兆字节,gG表示千兆字节。默认值是在运行时根据系统配置选择的。对于服务器部署,-Xms-Xmx经常设置为相同的值。请参阅位于的Java SE HotSpot虚拟机垃圾收集优化指南中的“人体工程学”部分http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html

下面的示例演示如何使用各种单位将分配的最大内存大小设置为80 MB:

-Xmx83886080 
-Xmx81920k 
-Xmx80m

-Xmx选项等效于-XX:MaxHeapSize

-Xnoclassgc

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

当您-Xnoclassgc在启动时指定时,应用程序中的类对象在GC期间将保持不变,并且始终被认为是活动的。这可能导致更多的内存被永久占用,如果不谨慎使用,将抛出内存不足异常。

-Xprof

分析正在运行的程序并将概要分析数据发送到标准输出。该选项作为实用程序提供,可在程序开发中使用,并且不打算在生产系统中使用。

-Xrs

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

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

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

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

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

指定有两个结果-Xrs

  • SIGQUIT 线程转储不可用。

  • 用户代码负责导致运行关闭挂钩,例如,通过System.exit()在终止JVM时进行调用来执行。

-Xshare:模式

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

汽车

如果可能,请使用CDS。这是Java HotSpot 32位客户端VM的默认值。

要求使用CDS。打印错误消息,如果无法使用类数据共享,则退出。

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

倾倒

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

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

-XshowSettings:类别

显示设置并继续。该选项的可能类别参数包括:

所有

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

地区

显示与语言环境相关的设置。

属性

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

虚拟机

显示JVM的设置。

-Xss 大小

设置线程堆栈大小(以字节为单位)。附加字母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:模式

设置字节码验证器的模式。字节码验证可确保类文件的格式正确,并满足Java虚拟机规范中的4.10节,文件验证中class列出的约束。

不要关闭验证,因为这会降低Java提供的保护,并可能由于类文件格式不正确而导致问题。

此选项的可能模式参数包括:

远程

验证所有未由引导类加载器加载的字节码。如果不指定该-Xverify选项,则这是默认行为。

所有

启用所有字节码的验证。

没有

禁用所有字节码的验证。-Xverify: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 = 文件名

指定发生不可恢复的错误时将错误数据写入的路径和文件名。默认情况下,此文件在当前工作目录中创建,并命名为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 = 参数 = 

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

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

defaultrecording = {true | false}

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

磁盘= {true | false}

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

dumponexit = {true | false}

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

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

dumponexitpath = 路径

指定带有JFR数据的转储文件的路径和名称,如果您设置了该dumponexit=true参数,则JVM以受控方式退出时将创建该文件。设置路径只有在您也进行设置的情况下才有意义defaultrecording=true

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

globalbuffersize = 大小

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

loglevel = {安静|错误|警告|信息|调试|跟踪}

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

maxage = 时间

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

仅当您设置disk=true参数时,此参数才有效。

maxchunksize = 大小

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

maxsize = 大小

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

仅当您设置disk=true参数时,此参数才有效。

仓库= 路径

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

samplethreads = {true | false}

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

设置= 路径

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

stackdepth = 深度

通过JFR进行堆栈跟踪的堆栈深度。默认情况下,深度设置为64个方法调用。最大值为2048,最小值为1。

threadbuffersize = 大小

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

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

-XX:FlightRecorderOptions = defaultrecording = true,disk = true,maxchunksize = 10M

-XX:LargePageSizeInBytes = 大小

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

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

-XX:LargePageSizeInBytes = 4m

-XX:MaxDirectMemorySize = 大小

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

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

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

-XX:NativeMemoryTracking = 模式

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

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

摘要

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

详情

除了跟踪JVM子系统的内存使用情况之外,还跟踪各个CallSite,单个虚拟内存区域及其提交的区域的内存使用情况。

-XX:ObjectAlignmentInBytes = 对齐

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

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

4GB * ObjectAlignmentInBytes

注意:随着对齐值增加,对象之间未使用的空间也会增加。因此,使用Java堆大小较大的压缩指针可能不会带来任何好处。

-XX:OnError = 字符串

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

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

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

-XX:OnOutOfMemoryError = 字符串

设置自定义命令或一系列以分号分隔的命令,以在OutOfMemoryError首次引发异常时运行。如果字符串包含空格,则必须将其用引号引起来。有关命令字符串的示例,请参见该-XX:OnError选项的描述。

-XX:+ PerfDataSaveToFile

如果启用,则在Java应用程序退出时保存jstat(1)二进制数据。此二进制数据保存在名为的文件中hsperfdata_,该文件是您运行的Java应用程序的进程标识符。使用jstat到如下显示包含在该文件中的性能数据:

jstat -class文件:/// <路径> / hsperfdata_  
jstat -gc文件:/// <路径> / hsperfdata_ 

-XX:-PreferContainerQuotaForCPUCount

如果为true,则根据其CPU CFS(完全公平调度程序)配额(如果设置)的值来计算容器CPU可用性。如果为false,则使用小于CPU配额值的CPU份额值。

如果未使用-XX:ActiveProcessorCount选项指定VM,则VM使用容器CPU可用性值来计算可用处理器的数量。

注意:CPU数量将永远不会超过该进程可用的活动处理器数。通过禁用活动处理器或PrintContainerInfo为容器选择cpuset(CPU列表;请参阅该选项),可以限制活动处理器。

-XX:+ PrintCommandLineFlags

启用打印按人体工程学选择的出现在命令行中的JVM标志。了解JVM设置的人体工程学值(例如堆空间大小和选定的垃圾收集器)可能会很有用。默认情况下,此选项为禁用状态,并且不打印标志。

-XX:+ PrintContainerInfo

打印有关容器的以下信息:

  • cpuset.cpus:如果您具有多个CPU或核心,则容器可以使用逗号分隔的列表或用连字符分隔的一系列CPU或核心。例如,值0-3表示容器可以使用第一,第二,第三和第四CPU。
  • cpuset.mems:以逗号分隔的列表或以连字符分隔的范围的存储节点(MEM),允许在其中执行;运行应用程序;仅在非统一内存访问(NUMA)系统上有效。
  • CPU Shares:该进程可用的CPU份额。
  • CPU Quota:保证每个周期的毫秒数运行。
  • CPU Period:CPU完全公平调度程序(CFS)周期,以毫秒为单位。
  • OSContainer::active_processor_count:VM使用的活动处理器数。
  • Memory Limit:容器可以使用的最大内存量(以字节为单位)。
  • Memory Soft Limit:容器应使用的最大内存量,以字节为单位;此限制小于“内存限制”,但是由于这是一个软限制,因此容器可能会超过该限制。
  • Memory Usage:此过程使用的内存量(以字节为单位)。
  • Maximum Memory Usage:此过程使用的最大内存量(以字节为单位)。

-XX:+ PrintNMTStatistics

启用本机内存跟踪时,启用在JVM出口打印收集的本机内存跟踪数据(请参阅参考资料-XX:NativeMemoryTracking)。默认情况下,此选项为禁用状态,并且不打印本机内存跟踪数据。

-XX:+ RelaxAccessControlCheck

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

-XX:+资源管理

在应用程序运行时启用资源管理。

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

java -XX:+UnlockCommercialFeatures -XX:+ResourceManagement

-XX:ResourceManagementSampleInterval = (毫秒)

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

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

-XX:SharedArchiveFile = 路径

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

-XX:SharedClassListFile =文件

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

java / lang / Object 
hello / Main

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

-XX:+ ShowMessageBoxOnError

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

-XX:StartFlightRecording = 参数 = 

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

compress = {true | false}

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

defaultrecording = {true | false}

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

延迟= 时间

指定Java应用程序启动时间与记录开始之间的延迟。追加s以秒,m分钟,h小时或d天为单位指定时间(例如,指定10m表示10分钟)。默认情况下,没有延迟,并且此参数设置为0。

dumponexit = {true | false}

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

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

例:

-XX:StartFlightRecording =名称=测试,文件名= D:\ test.jfr,dumponexit = true

持续时间= 时间

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

文件名= 路径

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

名称= 标识符

指定JFR记录的标识符。默认情况下,它设置为Recording x

maxage = 时间

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

maxsize = 大小

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

设置= 路径

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

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

-XX:StartFlightRecording =文件名= test.jfr,compress = true

-XX:ThreadStackSize = 大小

设置线程堆栈大小(以字节为单位)。追加字母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:+ TraceClass卸载

在卸载类时启用对它们的跟踪。默认情况下,此选项是禁用的,并且不会跟踪类。

-XX:+ TraceLoader约束

启用对装入程序约束记录的跟踪。默认情况下,此选项为禁用状态,并且不跟踪加载程序约束记录。

-XX:+解锁商业功能

启用商业功能。Oracle Java SE Advanced或Oracle Java SE Suite软件包中包含商业功能,如Java SE产品页面上的定义,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:SharedArchiveFile两个CDS在转储时间(见选项-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:-UseContainerSupport

VM提供自动容器检测支持,这使VM能够确定可在Docker容器中运行的Java进程可用的内存量和处理器数量。它使用此信息来分配系统资源。此支持仅在Linux x64平台上可用。如果支持,则此标志的默认值为,true并且默认情况下启用容器支持。您可以使用禁用它-XX:-UseContainerSupport

-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 = 大小

设置对象分配的预取距离的大小(以字节为单位)。从最后分配的对象的地址开始,预取将要用新对象的值写入的内存直到该距离。每个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 = 

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

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

-XX:AllocatePrefetchLines = 5

仅Java HotSpot Server VM支持此选项。

-XX:AllocatePrefetchStepSize = 大小

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

-XX:AllocatePrefetchStepSize = 16

仅Java HotSpot Server VM支持此选项。

-XX:AllocatePrefetchStyle = 样式

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

0

不要生成预取指令。

1个

每次分配后执行预取指令。这是默认参数。

2

使用线程本地分配块(TLAB)水印指针来确定何时执行预取指令。

3

在SPARC上使用BIS指令进行分配预取。

仅Java HotSpot Server VM支持此选项。

-XX:+背景编译

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

-XX:CICompilerCount = 线程

设置用于编译的编译器线程数。默认情况下,服务器JVM的线程数设置为2,客户端JVM的线程数设置为1,并且如果使用分层编译,则可缩放为内核数。下面的示例显示如何将线程数设置为2:

-XX:CICompilerCount = 2

-XX:CodeCacheMinimumFreeSpace = 大小

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

-XX:CodeCacheMinimumFreeSpace = 1024m

-XX:CompileCommand = 命令方法 [,选项 ]

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

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

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

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

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

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

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

-XX:CompileCommand = exclude,*。indexOf

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

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

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

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

打破

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

仅编译

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

唐替林

防止内联指定方法。

排除

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

救命

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

排队

尝试内联指定的方法。

日志

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

选项

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

-XX:CompileCommand = option,java / lang / StringBuffer.append,BlockLayoutByFrequency

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

打印

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

安静

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

编译器Oracle:排除java / lang / String.indexOf

您可以通过-XX:CompileCommand=quiet在其他选项之前指定该选项来抑制这种情况-XX:CompileCommand

-XX:CompileCommandFile = 文件名

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

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

打印java / lang / String toString

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

-XX:CompileOnly = 方法

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

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

请注意,将指定完整的类名,包括用斜杠(/)分隔的所有软件包和子软件包。为了简化剪切和粘贴操作,还可以使用-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 = 调用

设置编译之前解释的方法调用的次数。默认情况下,在服务器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 = 大小

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

-XX:InitialCodeCacheSize = 32k

-XX:+内联

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

-XX:InlineSmallCode = 大小

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

-XX:InlineSmallCode = 1000

-XX:+ LogCompilation

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

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

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

-XX:MaxInlineSize = 大小

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

-XX:MaxInlineSize = 35

-XX:MaxNodeLimit = 节点

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

-XX:MaxNodeLimit = 65000

-XX:MaxTrivialSize = 大小

设置要内联的平凡方法的最大字节码大小(以字节为单位)。追加字母kK表示千字节,mM表示兆字节,gG表示千兆字节。默认情况下,平凡方法的最大字节码大小设置为6个字节:

-XX:MaxTrivialSize = 6

-XX:+ OptimizeStringConcat

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

-XX:+打印组件

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

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

-XX:+打印编译

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

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

-XX:+ PrintInlining

启用内联决策的打印。这使您可以查看要内联的方法。

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

-XX:ReservedCodeCacheSize = 大小

设置JIT编译的代码的最大代码缓存大小(以字节为单位)。追加字母kK表示千字节,mM表示兆字节,gG表示千兆字节。默认的最大代码高速缓存大小为240 MB;默认值为100 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:分层编译

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

-XX:+ UseAES

为Intel,AMD和SPARC硬件启用基于硬件的AES内部函数。支持的硬件包括Intel Westmere(2010和更高版本),AMD Bulldozer(2011和更高版本)和SPARC(T4和更高版本)。UseAES与UseAESIntrinsics结合使用。

-XX:+使用AESIntrinsics

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

-XX:+ UseAES -XX:+ UseAESIntrinsics

要支持32位和64位UseAES和UseAESIntrinsics标志使用-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是Intel TSX的一部分,该TSX是x86指令集扩展,可简化多线程应用程序的创建。RTM引入了新的指示XBEGINXABORTXEND,和XTEST。该XBEGINXEND说明附上一组指令作为一个事务中运行。如果在运行事务时未发现冲突,则将在XEND指令中一起提交对存储器和寄存器的修改。该XABORT指令可用于显式中止事务,而该XEND指令可用于检查事务中是否正在运行一组指令。

当另一个线程尝试访问同一事务时,对事务的锁定会被夸大,从而阻塞了最初不请求访问该事务的线程。RTM要求指定一个后备操作集,以防事务中止或失败。RTM锁是已委派给TSX系统的锁。

RTM可以提高关键区域(冲突代码不能被多个线程同时访问)中冲突少的高竞争性锁的性能。RTM还提高了粗粒度锁定的性能,这种性能通常在多线程应用程序中表现不佳。(粗粒度锁定是长时间保持锁的策略,以最大程度地减少获取和释放锁的开销,而细粒度锁定是通过仅在必要时进行锁定并尽快解锁来尝试实现最大并行度的策略。 )此外,对于不同线程使用的竞争激烈的锁,RTM可以减少错误的缓存行共享,也称为缓存行乒乓。当来自不同处理器的多个线程正在访问不同资源时,就会发生这种情况,但是资源共享相同的缓存行。结果,处理器反复使其他处理器的高速缓存行无效,这迫使它们从主存储器而不是其高速缓存中读取。

-XX:+使用SHA

为SPARC硬件的SHA加密哈希功能启用基于硬件的内在函数。UseSHA与结合使用UseSHA1IntrinsicsUseSHA256IntrinsicsUseSHA512Intrinsics选项。

UseSHAUseSHA*Intrinsics标志默认情况下启用,并且仅适用于SPARC T4和新的Java HotSpot的服务器虚拟机的64位支持。

仅当使用sun.security.provider.Sun提供程序进行SHA操作时,此功能才适用。

要禁用所有基于硬件的SHA内部函数,请指定-XX:-UseSHA。要仅禁用特定的SHA内部函数,请使用适当的相应选项。例如:-XX:-UseSHA256Intrinsics

-XX:+使用SHA1Intrinsics

启用S​​HA-1加密哈希函数的内部函数。

-XX:+使用SHA256Intrinsics

启用S​​HA-224和SHA-256加密哈希函数的内部函数。

-XX:+使用SHA512Intrinsics

启用S​​HA-384和SHA-512加密哈希函数的内部函数。

-XX:+ UseSuperWord

允许将标量运算转换为超字运算。默认情况下启用此选项。要禁止将标量运算转换为超字运算,请指定-XX:-UseSuperWord。仅Java HotSpot Server VM支持此选项。

先进的可维修性选项

这些选项提供了收集系统信息和执行广泛调试的能力。

-XX:+扩展的DTraceProbes

启用dtrace影响性能的其他工具探针。默认情况下,此选项为禁用状态,dtrace仅执行标准探测。

-XX:+ HeapDumpOnOutOfMemoryError

java.lang.OutOfMemoryError引发异常时,使用堆分析器(HPROF)启用将Java堆转储到当前目录中的文件的功能。您可以使用该-XX:HeapDumpPath选项显式设置堆转储文件的路径和名称。默认情况下,禁用此选项,并且在OutOfMemoryError引发异常时不转储堆。

-XX:HeapDumpPath = 路径

设置-XX:+HeapDumpOnOutOfMemoryError选项时,设置用于写入由堆分析器(HPROF)提供的堆转储的路径和文件名。默认情况下,在当前工作目录中创建该文件,并将其命名为java_pidpid.hprof,其中pid是导致错误的进程的标识符。下面的示例显示如何显式设置默认文件(%p代表当前进程标识符):

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

以下示例显示如何将堆转储文件设置为/var/log/java/java_heapdump.hprof

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

-XX:LogFile = 路径

设置写入日志数据的路径和文件名。默认情况下,该文件在当前工作目录中创建,并且名为hotspot.log

以下示例显示如何将日志文件设置为/var/log/java/hotspot.log

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

-XX:+ PrintClassHistogram

Control+C事件(SIGTERM)之后启用类实例直方图的打印。默认情况下,此选项处于禁用状态。

设置此选项等效于运行jmap -histo命令或jcmd pid GC.class_histogram命令,其中pid是当前Java进程标识符。

-XX:+ PrintConcurrentLocks

启用java.util.concurrentControl+C事件(SIGTERM)之后打印锁。默认情况下,此选项处于禁用状态。

设置此选项等效于运行jstack -l命令或jcmd pid Thread.print -l命令,其中pid是当前Java进程标识符。

-XX:+ UnlockDiagnosticVMOptions

解锁用于诊断JVM的选项。默认情况下,此选项是禁用的,诊断选项不可用。

高级垃圾收集选项

这些选项控制Java HotSpot VM如何执行垃圾回收(GC)。

-XX:ActiveProcessorCount = x

覆盖VM用于计算其用于各种操作(例如垃圾收集和ForkJoinPool)的线程池大小的CPU数量。

VM通常从操作系统确定可用处理器的数量。在docker容器中运行多个Java进程时,此标志对于分区CPU资源很有用。即使UseContainerSupport未启用此标志,也将接受。请参阅-XX:-UseContainerSupport以获取有关启用和禁用容器支持的描述。

-XX:+攻击性堆

启用Java堆优化。这会根据计算机(RAM和CPU)的配置将各种参数设置为最佳的长时间运行作业,并需要大量的内存分配。默认情况下,该选项处于禁用状态,并且未优化堆。

-XX:+总是PreTouch

启用在JVM初始化期间触摸Java堆上的每个页面。在进入main()方法之前,这会将所有页面放入内存。该选项可用于测试以模拟一个长期运行的系统,并将所有虚拟内存映射到物理内存。默认情况下,此选项是禁用的,并且所有页面都将在JVM堆空间填充时提交。

-XX:+ CMSClassUnloadingEnabled

使用并发标记扫描(CMS)垃圾收集器时,启用类卸载。默认情况下启用此选项。要禁用CMS垃圾收集器的类卸载,请指定-XX:-CMSClassUnloadingEnabled

-XX:CMSExpAvgFactor = 百分比

设置在计算并发集合统计信息的指数平均值时用于加权当前样本的时间百分比(0到100)。默认情况下,指数平均系数设置为25%。下面的示例显示如何将因子设置为15%:

-XX:CMSExpAvgFactor = 15

-XX:CMSInitiatingOccupancyFraction = 百分比

设置开始CMS收集周期的旧占用百分比(0到100)。默认值设置为-1。任何负值(包括默认值)都表示-XX:CMSTriggerRatio用于定义初始占用率的值。

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

-XX:CMSInitiatingOccupancyFraction = 20

-XX:+ CMSScavengeBeforeRemark

在CMS备注步骤之前启用清除尝试。默认情况下,此选项处于禁用状态。

-XX:CMSTriggerRatio = 百分比

设置在-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 = 大小

设置使用垃圾优先(G1)收集器时将Java堆细分为的区域的大小。取值范围是1 MB到32 MB。默认区域大小是根据堆大小根据人体工程学确定的。

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

-XX:G1HeapRegionSize = 16m

-XX:+ G1PrintHeapRegions

启用有关G1收集器分配了哪些区域以及回收哪些区域的信息的打印。默认情况下,此选项处于禁用状态。

-XX:G1ReservePercent = 百分比

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

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

-XX:G1ReservePercent = 20

-XX:InitialHeapSize = 大小

设置内存分配池的初始大小(以字节为单位)。此值必须为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:InitialRAMPercentage = 百分比

设置在应用人机工程学启发式方法之前,JVM将用于Java堆的初始内存量(按-XX:MaxRAM选项中所述确定的最大内存量的百分比)。默认值为1.5625%。

以下示例显示了如何设置用于Java堆的初始内存量的百分比:

-XX:InitialRAMPercentage = 5

-XX:InitialSurvivorRatio = 比率

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

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

S = Y /(R + 2)

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

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

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

-XX:InitialSurvivorRatio = 4

-XX:InitiatingHeapOccupancyPercent = 百分比

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

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

-XX:InitiatingHeapOccupancyPercent = 75

-XX:MaxGCPauseMillis = 时间

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

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

-XX:MaxGCPauseMillis = 500

-XX:MaxHeapSize = 大小

设置内存分配池的最大大小(以字节为单位)。此值必须是1024的倍数且大于2 MB。追加字母kK表示千字节,mM表示兆字节,gG表示千兆字节。默认值是在运行时根据系统配置选择的。对于服务器部署,-XX:InitialHeapSize-XX:MaxHeapSize经常设置为相同的值。请参阅位于的Java SE HotSpot虚拟机垃圾收集优化指南中的“人体工程学”部分http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html

下面的示例演示如何使用各种单位将分配的最大内存大小设置为80 MB:

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

在Oracle Solaris 7和Oracle Solaris 8 SPARC平台上,此值的上限约为4,000 MB减去开销。在Oracle Solaris 2.6和x86平台上,上限约为2,000 MB(减去开销)。在Linux平台上,上限约为2,000 MB(减去开销)。

-XX:MaxHeapSize选项等效于-Xmx

-XX:MaxHeapFreeRatio = 百分比

设置GC事件后允许的最大可用堆空间百分比(0到100)。如果可用堆空间扩展到该值以上,则堆将缩小。默认情况下,此值设置为70%。

以下示例显示如何将最大可用堆比率设置为75%:

-XX:MaxHeapFreeRatio = 75

-XX:MaxMetaspaceSize = 大小

设置可以分配给类元数据的最大本机内存。默认情况下,大小不受限制。应用程序的元数据量取决于应用程序本身,其他正在运行的应用程序以及系统上可用的内存量。

下面的示例显示如何将最大类元数据大小设置为256 MB:

-XX:MaxMetaspaceSize = 256m

-XX:MaxNewSize = 大小

设置年轻代(托儿所)的堆的最大大小(以字节为单位)。默认值是根据人体工程学设置的。

-XX:MaxRAMPercentage = 百分比

设置在应用人体工程学启发式方法之前,JVM可用于Java堆的最大内存量(按该-XX:MaxRAM选项中所述确定的最大内存量的百分比)。默认值为25%。

如果此选项和其他影响最大内存量的选项的组合结果大于压缩oop可寻址的内存范围,则指定此选项将禁用自动使用压缩oop。请参阅-XX:UseCompressedOops有关压缩的oop的更多信息。

以下示例显示如何设置用于Java堆的最大内存量的百分比:

-XX:MaxRAMPercentage = 75

-XX:MaxTenuringThreshold = 阈值

设置用于自适应GC大小调整的最大使用期限阈值。最大值为15。并行(吞吐量)收集器的默认值为15,而CMS收集器的默认值为6。

以下示例显示如何将最大期限阈值设置为10:

-XX:MaxTenuringThreshold = 10

-XX:MetaspaceSize = 大小

设置分配的类元数据空间的大小,该类元数据空间将在首次超过垃圾收集时触发垃圾收集。垃圾收集的阈值取决于使用的元数据量而增加或减少。默认大小取决于平台。

-XX:MinHeapFreeRatio = 百分比

设置GC事件后允许的最小可用堆空间百分比(0到100)。如果可用堆空间低于此值,那么堆将被扩展。默认情况下,此值设置为40%。

下面的示例显示如何将最小可用堆比率设置为25%:

-XX:MinHeapFreeRatio = 25

-XX:MinRAMPercentage = 百分比

设置在应用人机工程学启发式方法之前,JVM可用于Java堆的最大内存量(按-XX:MaxRAM小堆选项中所述确定的最大内存量的百分比)。小堆是大约125 MB的堆。默认值为50%。

以下示例显示了如何为小堆设置用于Java堆的最大内存量的百分比:

-XX:MinRAMPercentage = 75

-XX:NewRatio = 比率

设置新老一代大小之间的比率。默认情况下,此选项设置为2。下面的示例演示如何将年轻/老人比率设置为1:

-XX:NewRatio = 1

-XX:NewSize = 大小

设置年轻一代(苗圃)的堆的初始大小(以字节为单位)。追加字母kK表示千字节,mM表示兆字节,gG表示千兆字节。

堆的年轻代区域用于新对象。与其他区域相比,在该区域执行GC的频率更高。如果年轻一代的大小太小,则会执行大量次要GC。如果大小太大,则将仅执行完整的GC,这可能需要很长时间才能完成。Oracle建议您将年轻代的大小保持在整个堆大小的一半到四分之一之间。

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

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

-XX:NewSize选项等效于-Xmn

-XX:ParallelGCThreads = 线程

设置用于年轻一代和老一代的并行垃圾回收的线程数。缺省值取决于JVM可用的CPU数量。

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

-XX:ParallelGCThreads = 2

-XX:+ ParallelRefProcEnabled

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

-XX:+ PrintAdaptiveSizePolicy

允许打印有关自适应发电规模的信息。默认情况下,此选项处于禁用状态。

-XX:+ PrintGC

启用在每个GC上打印消息的功能。默认情况下,此选项处于禁用状态。

-XX:+ PrintGCApplicationConcurrentTime

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

-XX:+ PrintGCApplicationStoppedTime

允许打印暂停(例如,GC暂停)持续了多长时间。默认情况下,此选项处于禁用状态。

-XX:+ PrintGCDateStamps

启用在每个GC上打印日期戳的功能。默认情况下,此选项处于禁用状态。

-XX:+ PrintGC详细信息

启用在每个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个字节经过一次清理后幸存下来,并从伊甸园复制到了幸存者空间,年龄2的对象占用了1 366 864字节,等等。每行中的第三个值是年龄n或对象的累积大小。减。

默认情况下,此选项处于禁用状态。

-XX:+ ScavengeBeforeFullGC

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

-XX:SoftRefLRUPolicyMSPerMB = 时间

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

下面的示例显示如何将该值设置为2.5秒:

-XX:SoftRefLRUPolicyMSPerMB = 2500

-XX:StringDeduplicationAgeThreshold = 阈值

String达到指定年龄的对象被视为重复数据删除的候选对象。对象的年龄是衡量垃圾回收存活了多少次的指标。有时称为保有权;见-XX:+PrintTenuringDistribution选项。请注意,String在达到此年龄之前提升为旧堆区域的对象始终被视为重复数据删除的候选对象。此选项的默认值为3。参见-XX:+UseStringDeduplication选项。

-XX:SurvivorRatio = 比率

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

-XX:SurvivorRatio = 4

-XX:TargetSurvivorRatio = 百分比

设置垃圾回收后所需的剩余空间百分比(0到100)。默认情况下,此选项设置为50%。

以下示例显示如何将目标幸存者空间比率设置为30%:

-XX:TargetSurvivorRatio = 30

-XX:TLABSize = 大小

设置线程本地分配缓冲区(TLAB)的初始大小(以字节为单位)。追加字母kK表示千字节,mM表示兆字节,gG表示千兆字节。如果此选项设置为0,那么JVM将自动选择初始大小。

以下示例显示如何将初始TLAB大小设置为512 KB:

-XX:TLABSize = 512k

-XX:+ UseAdaptiveSizePolicy

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

-XX:+仅使用CMSInitiatingOccupancy

启用将占用值用作启动CMS收集器的唯一条件。默认情况下,此选项为禁用状态,并且可以使用其他条件。

-XX:+ UseConcMarkSweepGC

启用CMS垃圾收集器用于旧版本。当吞吐量(-XX:+UseParallelGC)垃圾收集器无法满足应用程序延迟要求时,Oracle建议您使用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上花费的时间比例的策略的使用。默认情况下,启用此选项,OutOfMemoryError如果GC 的总时间中有98%以上花费在垃圾收集上,而回收的少于2%,则并行GC会抛出。当堆很小时,此功能可用于防止应用程序长时间运行而几乎没有进度或没有进度。要禁用此选项,请指定-XX:-UseGCOverheadLimit

-XX:+ UseNUMA

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

-XX:+ UseParallelGC

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

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

-XX:+ UseParallelOldGC

允许将并行垃圾收集器用于完整的GC。默认情况下,此选项处于禁用状态。启用它会自动启用该-XX:+UseParallelGC选项。

-XX:+ UseParNewGC

允许在年轻一代中使用并行线程进行收集。默认情况下,此选项处于禁用状态。设置该-XX:+UseConcMarkSweepGC选项时,它将自动启用。使用-XX:+UseParNewGC不带选项-XX:+UseConcMarkSweepGC的选择是在JDK 8弃用。

-XX:+ UseSerialGC

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

-XX:+ UseSHM

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

有关更多信息,请参见“大页面”。

-XX:+ UseStringDeduplication

启用字符串重复数据删除。默认情况下,此选项处于禁用状态。要使用此选项,必须启用垃圾优先(G1)垃圾收集器。参见-XX:+UseG1GC选项。

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

-XX:+ UseTLAB

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

不建议使用和删除的选项

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

-新星

启用增量垃圾收集。JDK 8中不推荐使用此选项,不能替代。

-Xrun libname

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

-XX:CMSIncrementalDutyCycle = 百分比

设置次要收集之间允许并发收集器运行的时间百分比(0到100)。在不推荐使用此选项之后,JDK 8中不推荐使用此选项,且不进行替换-XX:+CMSIncrementalMode

-XX:CMSIncrementalDutyCycleMin = 百分比

设置次要收集之间的时间百分比(0到100),该百分比-XX:+CMSIncrementalPacing是启用时占空比的下限。在不推荐使用此选项之后,JDK 8中不推荐使用此选项,且不进行替换-XX:+CMSIncrementalMode

-XX:+ CMSIncrementalMode

为CMS收集器启用增量模式。在JDK 8中,此选项已被弃用(无替代),以及其他以开头的选项CMSIncremental

-XX:CMSIncrementalOffset = 百分比

设置次要收集之间的时间间隔内增量模式占空比向右移动的时间百分比(0到100)。在不推荐使用此选项之后,JDK 8中不推荐使用此选项,且不进行替换-XX:+CMSIncrementalMode

-XX:+ CMSIncrementalPacing

根据JVM运行时收集的统计信息,启用对增量模式占空比的自动调整。在不推荐使用此选项之后,JDK 8中不推荐使用此选项,且不进行替换-XX:+CMSIncrementalMode

-XX:CMSIncrementalSafetyFactor = 百分比

设置在计算占空比时用于增加保守性的时间百分比(0到100)。在不推荐使用此选项之后,JDK 8中不推荐使用此选项,且不进行替换-XX:+CMSIncrementalMode

-XX:CMSInitiatingPermOccupancyFraction = 百分比

设置启动GC的永久发电占用百分比(0到100)。JDK 8中不推荐使用此选项,不能替代。

-XX:MaxPermSize = 大小

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

-XX:PermSize = 大小

设置分配给永久生成的空间(以字节为单位),如果超出该空间则触发垃圾回收。此选项在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

大页

也称为大页面,大页面是显着大于标准内存页面大小(取决于处理器和操作系统)的内存页面。大页面优化了处理器平移后备缓冲区。

Translation-Lookaside缓冲区(TLB)是一个页面转换缓存,其中保存了最近使用的虚拟到物理地址转换。TLB是一种稀缺的系统资源。由于处理器随后必须从分层页表中读取,因此可能需要进行多次内存访问,因此TLB丢失可能会造成很高的代价。通过使用更大的内存页面大小,单个TLB条目可以代表更大的内存范围。TLB的压力将减小,并且内存密集型应用程序可能具有更好的性能。

但是,大页面页面内存可能会对系统性能产生负面影响。例如,当应用程序固定大量内存时,可能会导致常规内存不足,并导致其他应用程序中的过多分页,并使整个系统变慢。同样,长时间运行的系统可能会产生过多的碎片,这可能导致无法保留足够大的页面内存。发生这种情况时,OS或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巨大
HugePages_Total:0 
HugePages_Free:0 
Hugepagesize:2048 kB

如果输出显示三个“ Huge”变量,则您的系统可以支持大页内存,但是需要对其进行配置。如果命令什么都不打印,则您的系统不支持大页面。要将系统配置为使用大页面内存,请以身份登录root,然后执行以下步骤:

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

    #echo 4294967295> / proc / sys /内核/ shmmax
    
  2. 如果使用选项-XX:+UseSHM-XX:+UseHugeTLBFS,则指定大页数。在以下示例中,为大页面保留了4 GB系统中的3 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)。
  • 如果配置(或调整大小)OS内核参数/proc/sys/kernel/shmmax/proc/sys/vm/nr_hugepages,则Java进程可能会为Java堆以外的区域分配较大的页面。这些步骤可以为以下区域分配大页面:

    • Java堆

    • 代码缓存

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

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

应用程序类数据共享

应用程序类数据共享(AppCDS)扩展了CDS(请参阅https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html),以使来自标准扩展目录(由system属性指定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

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

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

以下步骤创建一个共享归档这两个应用程序Hello,并Hi可以使用。

  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. 使用相同的共享档案运行HelloHi应用程序:

    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

退出状态

当使用错误的参数,严重的错误或JVM引发的异常调用启动程序时,启动程序通常会返回以下退出值。但是,Java应用程序可以选择使用API​​调用返回任何值System.exit(exitValue)。值是:

  • 0:成功完成

  • >0:发生错误

你可能感兴趣的:(Java8 官方jvm 标准参考 -XX 配置参数详细信息)