jdk8 jvm配置参数说明

时间:2021-05-22 15:09:12
这些选项是特定于Java HotSpot虚拟机的通用选项。 -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个已解释的方法调用,Server 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  尺寸

设置年轻代(托儿所)的堆的初始和最大大小(以字节为单位)。附加字母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对操作系统信号的使用。

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

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: 类别

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

所有

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

现场

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

性能

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

VM

显示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如果命令使用了endorsed-standards override机制或扩展机制,则启用该选项以阻止命令运行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:错误文件= / hs_err_pid%p.log 

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

-XX:错误文件= /无功/日志/ 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 = {真|假}

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

磁盘= {真|假}

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

dumponexit = {真|假}

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

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

dumponexitpath =  path

如果设置dumponexit=true参数,则使用JVM以受控方式退出时创建的JFR数据指定转储文件的路径和名称只有在设置的情况下才能设置路径defaultrecording=true

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

globalbuffersize =  size

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

日志等级= {安静|错误|警告|信息|调试|跟踪}

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

maxage =  时间

指定要为默认录制保留的磁盘数据的最长期限。附加s以指定以秒m单位的时间,分钟,h小时或d天数(例如,指定30s表示30秒)。默认情况下,最大年龄设置为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 = {真|假}

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

settings =  path

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

stackdepth =  深度

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本机内存使用情况的模式。此选项的可能模式参数包括以下内容:

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

摘要

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

详情

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

-XX:ObjectAlignmentInBytes =  alignment

设置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 file:/// <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 (毫秒)

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

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

-XX:SharedArchiveFile =  path

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

-XX:SharedClassListFile =  file_name

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

java / lang / Object 
hello / Main

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

-XX:+ ShowMessageBoxOnError

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

-XX:StartFlightRecording =  parameter  =  value

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

压缩= {真|假}

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

defaultrecording = {真|假}

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

延迟=  时间

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

dumponexit = {真|假}

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

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

例:

-XX:StartFlightRecording =名=测试中,文件名= d:\ test.jfr,dumponexit =真
持续时间=  时间

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

filename =  path

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

name =  标识符

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

maxage =  时间

指定要为默认录制保留的磁盘数据的最长期限。附加s以指定以秒m单位的时间,分钟,h小时或d天数(例如,指定30s表示30秒)。默认情况下,最大年龄设置为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

允许使用商业功能。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:+ UseHugeTLBFS

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

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

-XX:+ UseLargePages

允许使用大页面内存。默认情况下,禁用此选项并且不使用大页面内存。

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

-XX:+ UseMembar

允许在线程状态转换上发布membars。默认情况下,在除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 =  lines

设置在实例分配指针之前预取的行数。默认情况下,预取的行数设置为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 =  threads

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

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

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

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

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

-XX:CompileCommand =排除,爪哇/郎/ String.indexOf 

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

-XX:CompileCommand =排除,java.lang.String中的indexOf :: 

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

-XX:CompileCommand = “排除,爪哇/郎/ String.indexOf,(Ljava /郎/字符串;)I” 

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

-XX:CompileCommand =排除*的indexOf。 

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

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

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

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

打破

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

compileonly

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

dontinline

防止内联指定的方法。

排除

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

救命

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

排队

尝试内联指定的方法。

日志

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

选项

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

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

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

打印

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

安静

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

CompilerOracle:排除java / lang / String.indexOf 

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

-XX:CompileCommandFile =  filename

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

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

print java / lang / String toString 

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

-XX:CompileOnly =  方法

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

-XX:CompileOnly =爪哇/郎/ string.length减,JAVA / UTIL /则为list.size 

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

-XX:CompileOnly = java.lang.String中::长度,java.util.List中::大小 

虽然不支持通配符,但您只能指定类或包名称来编译该类或包中的所有方法,并且只指定在任何类中使用此名称编译方法的方法:

-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 =  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 =  节点

设置单个方法编译期间要使用的最大节点数。默认情况下,最大节点数设置为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标志,仅支持Java HotSpot Server VM 32位和64位。要禁用基于硬件的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是英特尔TSX的一部分,它是x86指令集扩展,有助于创建多线程应用程序。RTM引入了新的指示XBEGINXABORTXEND,和XTESTXBEGINXEND说明附上一组指令作为一个事务中运行。如果在运行事务时未发现冲突,则内存和寄存器修改将在XEND指令处一起提交XABORT指令可用于显式中止事务以及XEND检查是否在事务中运行一组指令的指令。

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

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

-XX:+ UseSHA

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

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

此功能仅在使用sun.security.provider.SunSHA操作提供程序时适用

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

-XX:+ UseSHA1Intrinsics

为SHA-1加密哈希函数启用内在函数。

-XX:+ UseSHA256Intrinsics

为SHA-224和SHA-256加密哈希函数启用内在函数。

-XX:+ UseSHA512Intrinsics

为SHA-384和SHA-512加密散列函数启用内在函数。

-XX:+ UseSuperWord

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

高级可维护性选项

这些选项提供了收集系统信息和执行大量调试的功能。

-XX:+ ExtendedDTraceProbes

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

-XX:+ HeapDumpOnOutOfMemoryError

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

-XX:HeapDumpPath =  path

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

-XX:HeapDumpPath = / java_pid%p.hprof 

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

-XX:HeapDumpPath = /无功/日志/ JAVA / java_heapdump.hprof 
-XX:LogFile =  path

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

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

-XX:日志文件= /无功/日志/ 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:+ AggressiveHeap

启用Java堆优化。根据计算机的配置(RAM和CPU),这会将各种参数设置为具有密集内存分配的长时间运行作业的最佳选择。默认情况下,禁用该选项并且不优化堆。

-XX:+ AlwaysPreTouch

在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 =  threads

设置用于并发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 =  百分比

设置保留为false上限的堆的百分比(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:+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毫秒:

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

设置内存分配池的最大大小(以字节为单位)。该值必须是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 =  size

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

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

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

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

-XX:MaxTenuringThreshold =  threshold

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

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

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

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

-XX:MinHeapFreeRatio =  百分比

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

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

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

设置年轻和老一代尺寸之间的比率。默认情况下,此选项设置为2.以下示例显示如何将年轻/旧比率设置为1:

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

设置年轻代(托儿所)的堆的初始大小(以字节为单位)。附加字母kK表示千字节,mM指示兆字节,gG指示千兆字节。

堆的年轻代区域用于新对象。GC在该区域比在其他区域更频繁地进行。如果年轻一代的规模太小,那么将会执行大量的小型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 =  时间

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

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

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

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 =  size

设置线程局部分配缓冲区(TLAB)的初始大小(以字节为单位)。附加字母kK表示千字节,mM指示兆字节,gG指示千兆字节。如果此选项设置为0,则JVM会自动选择初始大小。

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

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

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

-XX:+ UseCMSInitiatingOccupancyOnly

允许使用占用值作为启动CMS收集器的唯一标准。默认情况下,此选项已禁用,可能会使用其他条件。

-XX:+ UseConcMarkSweepGC

允许为旧一代使用CMS垃圾收集器。Oracle建议您在spam(-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上花费的时间比例默认情况下,此选项处于启用状态,OutOfMemoryError如果超过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

已弃用和已删除的选项

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

-Xincgc

启用增量垃圾收集。此选项在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 =  size

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

-XX:PermSize =  size

设置分配给永久生成的空间(以字节为单位),如果超出则会触发垃圾回收。此选项在JDK 8中已弃用,并被该-XX:MetaspaceSize选项取代

-XX:+ UseSplitVerifier

允许拆分验证过程。默认情况下,此选项在先前版本中已启用,验证分为两个阶段:类型引用(由编译器执行)和类型检查(由JVM运行时执行)。此选项在JDK 8中已弃用,现在默认情况下会对验证进行拆分,而无法将其禁用。

-XX:+ UseStringCache

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