参数分类

        标准参数 

                 以- 开头所有的JVM实现都必须实现这些参数的功能,且向后兼容

                控制台 java -help 可以列出标准参数

        非标准参数 

                -X开头默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足

                且不保证向后兼容

                控制台 java -X 列出非标准参数

        非稳定参数

-XX

                输出当前程序jvm参数

ManagementFactory.getRuntimeMXBean().getInputArguments()

常用参数

        现在基本都是jdk1.8及以上,就不具体指定那个版本了,1.8及以上都能使用

内存相关参数:

参数

含义

默认值

描述

-Xms

初始堆大小

也是最小值

系统内存1/64(<1G)

堆内存占用超过40%,自动增长,直到最大堆内存,

当堆内存空余超过70% 自动减少,知道最小堆内存

可通过 -XX:MaxHeapFreeRation 参数调整比例

Server端JVM最好将-Xms和-Xmx设为相同值

避免每次垃圾回收完成后JVM重新分配内存

本地操作一般默认就好

-Xmx

最大堆内存

系统内存1/4(<1G)

一般设置为老年代存活对象的3-4倍,即FullGC之后的

老年代内存占用的3-4倍,本地自己玩设置个2-4G左右

-Xmn

年轻代堆大小

默认堆内存1/3

eden+ 2survivor区总和(8:1:1),年轻代增大,

对应老年代会变小,慎重调整

sun官方推荐为堆大小的 3/8, 所以和默认差不太多

-Xss

每个线程的堆栈大小

默认1M

Java每个线程的堆栈大小。根据应用的

线程所需内存大小进行调整。在相同物理内存下

减小这个值能生成更多的线程。但是操作系统对一个

进程内的线程数还是有限制的,不能无限生成,

经验值在3000~5000左右。推荐默认(视情况定)

-XX:NewSize

设置年轻代大小

应该小于-Xms的值,一般-Xmn代替

-XX:MaxNewSize

最大年轻代大小

需要小于-Xmx的值,一般-Xmn代替

-XX:MetaspaceSize

元空间初始大小

20.75MB(64位jvm)

1.8才有,1.8以下是永久代大小设置,不做描述

-XX:MaxMetaspacesSize

元空间最大

理论无限大

一般和初始大小一致,常用200-300M

-XX:ThreadStackSize

线程堆栈大小

和 -Xss效果一样,推荐-Xss

-XX:NewRatio        

年轻代与老年代比例

-XX:NewRatio=4 ,新生代老年代比例:1:4  则

新生代占堆空间1/5,一般不设置,与老年代比例

1:2

-XX:SurvivorRatio        

eden与survivor比例

设置 8 两个s与eden比例2:8   一个s区则1:8(其他值不准确)

实测: 年轻代设置100M,下面是值的对比,和

想象中不一样(一般也不建议设置该参数)

Java 参数decode Java 参数设置_堆内存


-XX:MaxTenuringThreshold

最大年龄

15        

经历15次还没有被回收进入老年代,为0 直接进入老年代,参考:jvm误区--动态对象年龄判定 - 简书

一般不设置

-XX:PretenureSizeThreshold

对象多大直接分配老年代

0

默认值为0,即在旧一代中不直接创建任何对象

请谨慎使用此选项,因为它会降低性能而不是改进性能

-XX:TLABWasteTargetPercent

TLAB占eden区得百分比

默认:1%

-XX:+CollectGenOFirst

FullGC是否先YoungGC

false

                

CMS相关参数 

参数

含义

默认值

描述

-XX:+UseConcMarkSweepGC

老年代采用CMS收集器收集

false

true 开启CMS

-XX:+UseCMSCompactAtFullCollection

FullGC时压缩

false

对老年代进行压缩,可以消除碎片,但是可能会带来性能消耗(标记清除算法)

-XX:CMSFullGCsBeforeCompaction

多少次后内存压缩

CMS进行n次full gc后进行一次压缩。如果n=0,每次full gc后都会进行碎片压缩

-XX:CMSIncrementalMode

增量模式

false

并发收集递增进行,周期性把cpu资源让给正在运行的应用

-XX:+CMSIncrementalPacing

启用自动起搏

false

根据应用程序的行为自动调整每次执行的垃圾回收任务的数量

-XX:CMSIncrementalDutyCycleMin

0

每次增量回收垃圾,占总垃圾回收任务的最小比例

-XX:CMSIncrementalDutyCycle

10

每次增量回收垃圾,占总垃圾回收任务的比例

-XX:CMSInitiatingOccupancyFractio

老年代多少百分比触发FullGC

-1

如果CMSInitiatingOccupancyFraction在0~100之间,那么由CMSInitiatingOccupancyFraction决定。

否则由按 ((100 - MinHeapFreeRatio) + (double)( CMSTriggerRatio * MinHeapFreeRatio) / 100.0) / 100.0 决定

1.6后默认92%,

-XX:CMSMaxAbortablePrecleanTime

5000

在CMS的预清理阶段开始前,等待minor gc的最大时间

G1相关参数

参数

含义

默认值

描述

-XX:+UseG1GC

使用G1做为GC收集器

1.8+

在1.8+后默认使用,其在大内存情形下能够发挥更加卓越的性能(详细参考本人得垃圾回收器详解)

-XX:+PrintAdaptiveSizePolicy

自动调节新生代老年代

自适应策略,调节Young Old Size,一般G1不会设置新生代和老年代大小,而有G1根据停顿时间逐渐调整新生代和老年代的空间比例

-XX:G1ReservePercent

G1为分配担保预留的空间比例

10

预留10%的内存空间,应对新生代的分配担保情形

-XX:InitiatingHeap

OccupancyPercent

启动并发GC时的堆内存占用百分比

45

G1用它来触发并发GC周期,基于整个堆的使用率,而不只是某一代内存的使用比例。值为 0 则表示“一直执行GC循环)’. 默认值为 45 (例如, 全部的 45% 或者使用了45%).

-XX:G1HeapRegionSize  

G1内堆内存区块大小

(Xms + Xmx ) /2 / 2048,不大于32M,不小于1M,且为2的指数

G1将堆内存默认均分为2048块,1M<region<32 M,当应用频繁分配大对象时,可以考虑调整这个阈值,因为G1的Humongous区域只能存放一个大对象,适当调整Region大小,尽量让其刚好超过大对象的两倍大小,这样就能充分利用Region的空间

-XX:GCTimeRatio

GC时间占运行时间的比例

G1为9,CMS为99

GC时间占总时间的比例,默认值为99,即允许1%的GC时间。仅仅在Parallel Scavenge收集时有效,公式为1/(1+n)

-XX:G1HeapWastePercent

触发Mixed GC的可回收空间百分比

5%

在全局并发标记结束之后,我们可以知道老年代regions中有多少空间要被回收,在每次YGC之后和再次发生Mixed GC之前,会检查垃圾占比是否达到此参数,只有达到了,下次才会发生Mixed GC

-XX:G1MixedGCLive

ThresholdPercent

会被MixGC的Region中存活对象占比

85%

老年代region中的存活对象的占比,只有小于此参数,才会被选入CSet(记忆集合)

-XX:G1MixedGCCountTarget

8

一次全局并发标记结束之后,最多执行Mixed GC的次数

-XX:G1NewSizePercent

新生代占堆的最小比例

5%

-XX:G1MaxNewSizePercent

新生代占堆的最大比例

60%

-XX:GCPauseIntervalMillis

指定最短多长可以进行一次gc

-XX:G1OldCSetRegion

ThresholdPercent

Mixed GC每次回收Region的数量比例

10%

一次Mixed GC中能被选入CSet的最多old generation region数量比列

-XX:ParallelGCThreads

STW期间,并行GC线程数

-XX:ConcGCThreads

并发标记阶段,并行执行的线程数

调优或其他常用参数

参数

含义

默认值

描述

-XX:+PrintGC

GC时打印概览信息

关闭

[GC (Allocation Failure)  74613K->19143K(183296K), 0.0047467 secs]

-XX:HeapDumpPath

堆内存快照到处路径

指定HeapDump的文件路径或目录,使用前需开启HeapDumpOnOutOfMemoryError

-XX:+HeapDumpOnOutOfMemoryError

在OOM后导出堆内存快照

默认关闭

-XX:OnError

在Error时执行操作

可配置相应命令,在Error时执行此命令,比如发送邮件

-XX:OnOutOfMemoryError

在发生OOM时执行操作

-XX:+PrintCommandLineFlags

打印jvm参数

在程序运行前打印出用户手动设置或者JVM自动设置的XX选项

-XX:+PrintGCDetails

GC时打印详细信息

关闭

-XX:+PrintGCTimeStamps

打印GC用时

关闭

-XX:+PrintGCApplicationStoppedTime

打印GC时应用暂停时间

关闭

-Xloggc:< filename>

将GC相关日志记录到文件以便分析

-XX:GCLogFileSize

8K

使用前需开启-Xloggc,GC日志文件默认大小,当日志超过8K时需要被滚动存储

-XX:+UseGCLogFileRotation

关闭

开启GC日志文件的滚动存储功能

-XX:NumberOfGCLogFiles

GC文件数量

1

GC日志滚动文件数量,超过时会删除最先创建的

-XX:+CITime

关闭

打印启动时花费在JIT 编译器时

一些常用或者需要了解得参数暂时记录到这儿,后续可能还会有新增得记录,方便日后学习和工作中使用