java虚拟机高级参数及java命令大全 基于java8及以上

概要

  • java命令执行的参数示例
          java [options] classname [args]
         
    java [options] -jar filename [args]
          javaw [options] classname [args]
          javaw [options] -jar filename [args]
  • 参数示例说明

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


     

选项

  • 标准选项
  • 非标准选项
  • 高级运行时选项
  • 高级JIT编译器选项
  • 高级可维护性选项
  • 高级垃圾手机选项

     

标准选项

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

参数 描述
-agentlib:libname [= options ]

加载指定的本地代理库。在库名之后,可以使用特定于库的以都好分割的选项列表

-agentpath:pathname [= options ] 加载绝对路径名指定的本机代理库。此选项等效于-agentlib但使用库的完整路径和文件名
-client 选择Java HotSpot客户端VM。64位版本的Java SE Development Kit(JDK)当前忽略此选项,而是使用Server JVM
-Dproperty=value 设置系统属性值。该属性变量是没有空格表示属性的名称的字符串。的变量是表示属性的值的字符串。如果value是带空格的字符串,则将其用引号括起来(例如-Dfoo="foo bar"
-disableassertions[:[packagename]...|:classname] 用来设置虚拟机关闭断言处理,packagename和classname的使用方法和-ea相同。
-da[:[packagename]...|:classname] 禁用断言。默认情况下,在所有包和类中禁用断言。
-disablesystemassertions 禁用所有系统类中的断言
-dsa 禁用所有系统类中的断言
-enableassertions[:[packagename]...|:classname] 启用断言。默认情况下,在所有包和类中禁用断言。
-ea[:[packagename]...|:classname] 启用断言。默认情况下,在所有包和类中禁用断言。
-enablesystemassertions 在所有系统类中启用断言
-esa 在所有系统类中启用断言
-help | -? 显示java命令的使用信息,而不实际运行JVM
-jar filename 执行封装在JAR文件中的程序。该文件名参数是与包含在形成一条线的清单JAR文件的名称Main-Class:classname,定义与类public static void main(String[] args)充当应用程序的出发点方法
-javaagent:jarpath[=options] 加载指定的Java编程语言代理程序。有关检测Java应用程序的更多信息,请参阅java.lang.instrumentJava API文档中的包描述
-jre-restrict-search 在版本搜索中包含用户私有JRE
-no-jre-restrict-search 从版本搜索中排除用户私有JRE
-server 选择Java HotSpot Server VM。64位版本的JDK仅支持服务器VM,因此在这种情况下,该选项是隐式的
-showversion 显示版本信息并继续执行应用程序。此选项等同于该-version选项,但后者指示JVM在显示版本信息后退出
-splash:imgname

使用imgname指定的图像显示启动画面。例如,要在启动应用程序时显示目录中的splash.gif文件images,请使用以下选项:-splash:图像/ splash.gif

-verbose:class 显示有关每个已加载类的信息
-verbose:gc 显示有关每个垃圾回收(GC)事件的信息
-verbose:jni 显示有关使用本机方法和其他Java Native Interface(JNI)活动的信息
-version 显示版本信息,然后退出。此选项等同于该-showversion选项,但后者在显示版本信息后不指示JVM退出
-version:release 指定用于运行应用程序的发行版本。如果java调用的命令版本不符合此规范并且在系统上找到适当的实现,则将使用适当的实现

 

非标准选项

  • 这些选项是特定于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

-Xmaxjitcodesize = size

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

此选项相当于-XX:ReservedCodeCacheSize

-Xmixed

除了热方法之外,解释器执行所有字节码,热方法被编译为本机代码

-Xmnsize

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

-Xmssize

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

-Xmxsize

指定内存分配池的最大大小(以字节为单位),以字节为单位。该值必须是1024的倍数且大于2 MB。附加字母k或K表示千字节,m或M指示兆字节,g或G指示千兆字节。根据系统配置在运行时选择默认值。对于服务器部署,-Xms并-Xmx经常设置为相同的值。请参阅Java SE HotSpot虚拟机垃圾收集调整指南中的“人体工程学”部分
-Xnoclassgc

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

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

-Xprof 配置正在运行的程序并将分析数据发送到标准输出。此选项作为在程序开发中有用的实用程序提供,不适用于生产系统
-Xrs 减少JVM对操作系统信号的使用
-Xshare:mode

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

auto

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

on

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

off

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

dump

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

-XshowSettings:category

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

all

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

locale

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

properties

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

VM

显示JVM的设置。

-Xsssize 设置线程堆栈大小(以字节为单位)。附加字母kK表示KB,mM表示MB,gG表示GB。默认值取决于虚拟内存
-Xverify:mode

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

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

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

remote

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

all

启用所有字节码的验证。

none

禁用所有字节码的验证。使用-Xverify:none不受支持。

 

高级运行时选项(以下部分与java虚拟机参数详细列表那篇有相同的)

  • 这些选项控制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

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

-XX:错误文件= C:/log/java/java_error.log

如果无法在指定目录中创建文件(由于空间不足,权限问题或其他问题),则会在操作系统的临时目录中创建该文件。临时目录由TMP环境变量的值指定; 如果未定义该TEMP环境变量,则使用环境变量的值

-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指定选项),才能使用此选项

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

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

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

4GB * ObjectAlignmentInBytes

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

-XX:OnError = string

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

以下示例显示了如何使用该-XX:OnError选项运行userdump.exe实用程序以在出现无法恢复的错误(%p指定当前进程)时获取崩溃转储:

-XX:OnError =“userdump.exe%p”

前面的示例假定userdump.exePATH环境变量中指定了该实用程序的路径

-XX:OnOutOfMemoryError = string

设置自定义命令或一系列以分号分隔的命令,以便在OutOfMemoryError首次引发异常时运行。如果字符串包含空格,则必须用引号括起来。

-XX:+ PerfDataSaveToFile

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

jstat -class file:///  / hsperfdata_  
jstat -gc file:///  / hsperfdata_ 
-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.Objecthello.Main,创建一个包含以下两行的文本文件:

java / lang / Object 
hello / Main

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

-XX:+ShowMessageBoxOnError 当JVM遇到无法恢复的错误时,允许显示对话框。这可以防止JVM退出并使进程保持活动状态,以便您可以将调试器附加到它以调查错误原因。默认情况下,禁用此选项
-XX:StartFlightRecording=parameter=value 启动Java应用程序的JFR记录。这是一个与-XX:+UnlockCommercialFeatures选项配合使用的商业功能。此选项等同于JFR.start在运行时启动记录的诊断命令
-XX:ThreadStackSize=size

设置线程堆栈大小(以字节为单位)。附加字母kK表示千字节,mM指示兆字节,gG指示千兆字节。默认值取决于虚拟内存。

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

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

此选项相当于-Xss

-XX:+TraceClassLoading 允许在加载类时跟踪类。默认情况下,禁用此选项并且不跟踪类
-XX:+TraceClassLoadingPreorder 允许按引用顺序跟踪所有已加载的类。默认情况下,禁用此选项并且不跟踪类
-XX:+TraceClassResolution 允许跟踪常量池分辨率。默认情况下,禁用此选项并且不跟踪常量池分辨率
-XX:+TraceClassUnloading 允许在卸载类时跟踪类。默认情况下,禁用此选项并且不跟踪类
-XX:+TraceLoaderConstraints 允许跟踪加载器约束记录。默认情况下,禁用此选项并且不跟踪加载程序约束记录
-XX:+UnlockCommercialFeatures

默认情况下,此选项被禁用,JVM在没有商业功能的情况下运行。一旦为JVM进程启用了它们,就无法禁用它们用于该进程。

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

-XX:+UseAppCDS

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

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

-XX:-UseBiasedLocking

禁用使用偏置锁定。一些具有大量无竞争同步的应用程序可以在启用此标志的情况下获得显着的加速,而具有某些锁定模式的应用程序可能会看到减速。有关偏置锁定技术的更多信息,请参阅Java调优白皮书中的示例

默认情况下,启用此选项

-XX:-UseCompressedOops

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

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

-XX:+UseLargePages 允许使用大页面内存。默认情况下,禁用此选项并且不使用大页面内存
-XX:+UseMembar 允许在线程状态转换上发布membars。默认情况下,在除ARM服务器之外的所有平台上都禁用此选项。(建议您不要在ARM服务器上禁用此选项。)
-XX:+UsePerfData 启用该perfdata功能。默认情况下启用此选项以允许JVM监视和性能测试。禁用它会禁止创建hsperfdata_userid目录。要禁用该perfdata功能,请指定-XX:-UsePerfData
-XX:+AllowUserSignalHandlers 允许应用程序安装信号处理程序。默认情况下,禁用此选项,并且不允许应用程序安装信号处理程序

 

高级JIT编译器选项(以下部分与java虚拟机参数详细列表那篇有相同的)

  • 这些选项控制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=instruction

将预取指令设置为在分配指针之前预取。只有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 =1024m

-XX:CompileCommand=command,method[,option]

指定要对方法执行的命令

-XX:CompileCommandFile=filename

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

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

print java / lang / String toString

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

-XX:CompileOnly=methods

设置应限制编译的方法列表(以逗号分隔)。仅编译指定的方法。使用完整的类名(包括包和子包)指定每个方法。例如,为了仅编译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=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:+Inline

启用方法内联。默认情况下启用此选项以提高性能。要禁用方法内联,请指定-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标志,仅支持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,和XTEST。该XBEGINXEND说明附上一组指令作为一个事务中运行。如果在运行事务时未发现冲突,则内存和寄存器修改将在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支持此选项


 

高级可维护性选项(以下部分与java虚拟机参数详细列表那篇有相同的)

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

参数 描述

-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

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

-XX:HeapDumpPath = C:/log/java/java_heapdump.log

-XX:LogFile = path

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

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

-XX:日志文件= C:/log/java/hotspot.log

-XX:+ PrintClassHistogram

允许在Control+Break事件后打印类实例直方图。默认情况下,禁用此选项。

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

-XX:+ PrintConcurrentLocks

java.util.concurrentControl+Break事件发生后启用锁定打印。默认情况下,禁用此选项。

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

-XX:+ UnlockDiagnosticVMOptions

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


 

高级垃圾收集选项(以下部分与java虚拟机参数详细列表那篇有相同的)

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

参数 描述

-XX:+ AggressiveHeap

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

-XX:+ AlwaysPreTouch

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

-XX:+ CMSClassUnloadingEnabled

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

-XX:+CMSClassUnloadingEnabled

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

-XX:CMSExpAvgFactor=percent

设置在计算并发收集统计信息的指数平均值时用于加权当前样本的时间百分比(0到100)。默认情况下,指数平均值因子设置为25%。以下示例显示如何将因子设置为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=threads

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

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

-XX:ConcGCThreads = 2

-XX:+DisableExplicitGC

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

-XX:+ExplicitGCInvokesConcurrent

通过System.gc()在并发GC周期期间使用请求和卸载类,可以调用并发GC。默认情况下禁用此选项,并且只能与该-XX:+UseConcMarkSweepGC选项一起启用

-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses

 

-XX:G1HeapRegionSize=size

设置使用垃圾优先(G1)收集器时Java堆所细分的区域的大小。该值可以介于1 MB和32 MB之间。默认区域大小根据堆大小以符合人体工程学的方式确定。

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

-XX:G1HeapRegionSize =16m

-XX:+G1PrintHeapRegions

允许打印有关哪些区域已分配以及哪些区域由G1收集器回收的信息。默认情况下,禁用此选项

-XX:G1ReservePercent=percent

设置保留为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=percent

设置启动并发GC循环的堆占用百分比(0到100)。它由垃圾收集器使用,它根据整个堆的占用而触发并发GC循环,而不仅仅是其中一代(例如,G1垃圾收集器)。

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

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

设置最大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

-XX:MaxHeapSize选项相当于-Xmx

-XX:MaxHeapFreeRatio=percent

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

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

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

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

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

-XX:MaxMetaspaceSize =256m
-XX:MaxNewSize=size 设置年轻代(托儿所)的堆的最大大小(以字节为单位)。默认值按人体工程学设置
-XX:MaxTenuringThreshold=threshold

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

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

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

设置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=time

设置软件可访问对象在上次引用后在堆上保持活动状态的时间(以毫秒为单位)。默认值是堆中每个可用兆字节的生存期的一秒。该-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=ratio

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

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

设置年轻垃圾收集后使用的幸存者空间(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:+UseStringDeduplication

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

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

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

 

JRE参数列表(-XX:FlightRecorderOptions = parameter = value所需要)

  • 以下列表包含所有可用的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

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

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

globalbuffersize=size

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

loglevel={quiet|error|warning|info|debug|trace}

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

maxage=time

指定要为默认录制保留的磁盘数据的最长期限。附加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={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:CompileCommand=command,method[,option]所需要)

  • 以下列表包含所有可用的方法:

参数 描述

break

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

compileonly

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

dontinline

防止内联指定的方法

exclude

从编译中排除指定的方法

help

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

inline

尝试内联指定的方法

log

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

option

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

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

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

print

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

quiet

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

CompilerOracle:排除java / lang / String.indexOf

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


java8中被启用和删除的选项

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

参数 描述

-Xincgc

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

-Xrun libname

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

-XX:CMSIncrementalDutyCycle=percent

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

-XX:CMSIncrementalDutyCycleMin=percent

设置次要集合之间的时间百分比(0到100),它-XX:+CMSIncrementalPacing是启用时占空比的下限。在弃用选项后,此选项在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中删除,无需替换


 

你可能感兴趣的:(java虚拟机)