kl个人博客 首页>>java>>JVM1.8参数大全-jvm性能调优速查手册

JVM1.8参数大全-jvm性能调优速查手册

JVM1.8参数大全-jvm性能调优速查手册

前言碎语

JVM内存模型,java GC垃圾内存回收,Jvm性能调优等等是个老生常谈的话题,故将官方JVM参数详情直译(Google翻译)记录在此,以备做jvm参数调优之时方便查询,同时给大家提供便利

jvm1.8参数详情:

-Xcomp

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

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

-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

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

-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: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 =1米 -XX:MaxDirectMemorySize = 1024K -XX:MaxDirectMemorySize = 1048576 
-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_,其中是您运行的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(毫秒)

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

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

-XX:SharedArchiveFile = path

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

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

-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指示千兆字节。默认值取决于平台:

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

-XX:ThreadStackSize =1米 -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

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


高级垃圾收集选项

这些选项控制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 =6米 

如果将此选项设置为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 =80米 

在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:新尺寸=256米 -XX:新尺寸= 262144k -XX:新尺寸= 268435456 

-XX:NewSize选项相当于-Xmn

-XX:ParallelGCThreads = threads

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

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

文末结语

jvm1.8官方文档:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

jvm1.8GC调优文档:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/

jdk1.8官方文档:https://docs.oracle.com/javase/8/


kl个人博客