温馨提示: 使用-XX:+PrintFlagsFinal 打印所有以-XX格式的参数,总共差不多700多个,
:=
表示是被修改过的意思,所有的参数都是在-VM环境设置
1.java -X/-XX基本参数
-X 格式的参数
-
-Xint
设置只用执行解释器执行 -
-Xmixed
设置混合执行器(解释器+JIT编译器(热点代码缓存)) -
-Xms10m
设置最小堆内存大小,默认物理内存的1/64,通常和-Xmx10m
值设置成一样 -
-Xmx10m
设置最大堆内存大小,默认物理内存的1/4 -
-Xss10m
设置栈内存大小
-XX 格式bool类型参数
-
-XX:+UseParallelGC
启用并行垃圾收集器 -
-XX:+UseG1GC
启用G1垃圾收集器 -
-XX:+UseAdaptiveSizePolicy
自动选择年轻代区大小和相应的Survivor
区比例 -
-XX:+PrintFlagsFinal
打印所有的-XX参数大约700多个
-XX 格式等值类型参数
-
-XX:NewSize=1024m
设置新生代初始值1024m -
-XX:MaxGCPauseMillis=500
设置GC停顿时间500ms -
-XX:GCTimeRatio=19
设置吞吐量 -
-XX:NewRatio=2
设置新老年代比例1:2 ,若指定具体新生代内存大小,老年代=总内存-新生代,比例失效 -
-XX:HeapDumpPath=路径/a.hprof
导出dump文件 -
-XX:SurvivorRatio=8
设置Eden和from,to的三者比例 8:1:1,实际是6:1:1
2.JVM设置相关参数
-
-XX:+PrintCommandLineFlags
在程序启动前打印用户手动设置或者JVM自动设置的XX选项 -
-XX:+PrintFlagsInitial
打印所有的-XX格式的参数 -
-XX:+PrintFlagsFinal
打印XX选项在运行生效的值 -
-XX:+PrintVMOptions
打印JVM参数
3.栈、堆、方法区相关参数
栈
-
-Xss1024m
设置栈内存大小(通常不用设置,不发生GC)
堆
-
-Xms3550m
设置堆最小内存 -
-Xmx3550
设置堆最大内存 -
-Xmn2g
设置新生代内存为2G(若设置了-Xms/Xmx会把剩余的内存分给老年代) -
-XX:NewSize=1024m
设置新生代初始值1024m -
-XX:MaxNewSize=2048
设置新生代最大值2048m(NewSize
、MaxNewSize
可以用-Xmn2g
直接代替) -
-XX:NewRatio=2
设置新老年代比例1:2 ,若指定具体新生代内存大小,老年代=总内存-新生代,比例失效 -
-XX:SurvivorRatio=8
设置新生代中Eden
和0,1区比例8:1:1,显示赋值SurvivorRatio
值为8,否则不生效 -
-XX:-UseAdaptiveSizePolicy
设置Eden
和0,1区比例(默认开启,实际情况是6:1:1) -
-XX:+PretenureSizeThreadshold=1024
让大于该阈值的对象直接老年代分配(单位/byte),只对Serial
、ParNew
收集器有效 -
-XX:MaxTenuringThreshoold=15
设置值为15,新生代每次MinorGc
后,还存活对象年龄计数+1,如果大于15就晋升为老年代 -
-XX:+PrintTenuringDistribution
设置JVM在每次MinorGC
后打印出当前Survivor
区中对象的年龄分布 -
-XX:TargetSurvivorRatio
设置MinorGC
结束后Survivor
区域中占用空间的期望比例
方法区(永久代/元空间)
-
-XX:PermSize=256m
设置永久代最小值256m -
-XX:MaxPermSize=256m
设置永久代最大值256m -
-XX:MetaspaceSize=1024m
设置元空间最小值1024m -
-XX:MaxMetaspaceSzie=1024m
设置元空间最大值1024m -
-XX:+UseCompressedOops
压缩对象指针 -
-XX:UseCompressedClassPointers
压缩类指针
4.直接内存日志打印
-
-XX:MaxDirectMemroySize
指定DirectMemroy
容量,若未指定,默认和java堆最大值一样 -
-XX:+PrintGCDetails
打印出运行时程序的GC回收日志信息
5.OOM相关参数
-
-XX:+HeapDumpOnOutOfMemoryError
在发生OOM时,把Heap转存(Dump)到文件便于分析 -
-XX:+HeapDumpBeforeFullGC
在发生FullGC之前,生成Heap转存文件(存在多次FullGC产生多个文件) -
-XX:HeapDumpPath=<Path>
指定heap转存文件的路径 -
-XX:OnOutOfMemoryError
设置一个可行性程序或者脚本程序,发生OOM时,执行这个脚本(手动执行GC指令)
6.垃圾收集器
Serial/Old GC收集器
-
-XX:+PrintCommandLineFlags
可以查询当前JVM使用的垃圾收集器 -
-XX:+UseSerialGC
设置单线程或者Client端使用的串行收集器,单线程收集效率很高 -
-XX:+UseSeialOldGC
由-XX:+UseSerialGC
激活出来的对应老年代串行收集器
ParNew/Parallel/Old GC收集器
-
-XX:+UseParNew
使用并行收集器 -
-XX:ParallelGCThreads=n
限制ParNew
的线程数,默认线程数小于8时,线程数和CPU数等值,超过8,按照计算公式=3+[5*CPU_Count]/8
-
-XX:+UseParallenGC
使用并行收集器 -
-XX:ParallelGCThreads
限定收集器线程数,一般和CPU相同避免过多线程数影响垃圾收集性能 -XX:MaxGCPauseMillis
设置GC最大停顿时间(STW的时间/ms)
- 为了尽可能把停顿时间控制在
MaxGCPauseMills
以内,收集器在工作时会自动调整Java堆大小或者其他一些参数 - 对于用户来说,停顿时间越短体验越好,但是在服务器端,我们注重高并发,整体的吞吐量,所以Parallel适合服务器端,进行控制
-XX:GCTimeRatio
设置收集时间占总时间的比例=1/(N+1)
,用于衡量吞吐量大小
- 取值范围(0,100),默认值99,也就是垃圾回收器时间不超过1%
- 与之前
-XX:MaxGCPauseMillis
参数有一顿矛盾,暂停时间越长,Radio
参数就容易超过设定的比例
-
-XX:+UseAdaptiveSizePolicy
设置ParallelScavenge
收集器的自适应调节,默认是开启状态
CMS收集器(JDK9已过时,JDK14完全删除)
-
-XX:UseConMarkSweepGC
开启CMS
并发收集器,开启参数后自动配合-XX:+UseParNewGC
会打开,就是=ParNew
(新生代)+CMS
(老年代)+Serial Old
组合(也就是混合收集),不能和Parallel
搭配,Parallel
有自己的搭配Parallel old GC
,他们两是不同体系的垃圾收集器 -XX:CMSInitiatingOccupanyFraction
设置堆内存使用率的阈值,达到阈值,便会开始进行回收
- JDK5及以前版本默认值为68,即当老年代的空间使用率达到68%时,会进行一次
CMS
回收,JDK6及以上默认92% - 如果内存增长缓慢,则可以设置一个稍大的值,大的阈值可以有效降低
CMS
的触发频率,减少老年代的回收次数可以明显提高应用程序的性能,反之,如果应用程序 - 内存使用率增长很快,则应该降低这个阈值,以避免频繁触发老年代串行收集器,因此通过该选项便可以有效降低
FullGC
的执行次数
-
-XX:UseCMSCompactAtFullCollection
用于指定在执行完FullGC
之后用于对内存空间进行压缩整理,避免内存碎片化,不过由于进行压缩整理内存碎片时,无法并行执行,因此带来的问题就是停顿时间变长 -
-XX:CMSFulllGCBeforeCompaction
指定在设置多少次FullGC
之后进行内存碎片化进行压缩整理 -
-XX:ParallelCMSThreads
设置CMS线程数,CMS默认启动线程数=(ParallelGCThreads+3)/4
,ParallelCMSThreads
是年轻代收集器的线程数,当CPU资源紧张时,受到CMS收集器线程数的影响,应用程序性能明显降低 -
-XX:ConcGCThreads
设置并发垃圾收集器的线程数,默认是基于ParallelGCThreads
计算出来的
G1收集器(业务驱动低延迟保证一定吞吐量)
-
-XX:+UseG1GC
使用G1垃圾回收器(不建议再去设置-Xmn,-XX:NewRatio
可能会影响到我们的MaxGCPauseMillis
) -
-XX:G1HeapRegioonSize
设置每个Region
的大小,值是2的幂,范围是1m-32m之间,目标是根据最小的java堆大小划分出来的2048个区域,默认是堆内存的1/2000 -
-XX:MaxGCPauseMillis
设置GC停顿时间(尽力在可控制的时间,达到高吞吐量),默认值200ms -
-XX:ParallelGCThreads
设置STW的GC线程数,最多为8 -
-XX:ConcGCThreads
设置并发标记的线程数,将n设置为并行垃圾收集器(ParallelGCThreads
)的1/4左右 -
-XX:G1ReservePercent=10
保留内存区域,防止to space(Survivor
中的to区)溢出
7.输出日志文件
-
-Xloggc:<path>
输出gc日志文件然后使用工具打开分析
8.其他参数
-
-XX:ReservedCodeCacheSize=<n>
设置代码缓存的大小 -
-XX:InitialCodeCacheSize=<n>
设置代码缓存的大小(JIT执行的热点代码缓存),同上参数 -
-XX:+DoEsacpeAnalysis
开启逃逸分析(实例对象内存在栈中分配而不是堆,说法不一) -
-XX:+UseBiasedLocking
开启偏向锁(对象header中的偏向锁ID) -
-XX:+UseLargePages
开启使用大页面 -
-XX:+UseTLAB
开启TLAB
,默认打开(当我们多个线程同时访问Eden
区数据,为了保证数据安全性,我们得需要为Eden
枷锁,但是这样效率低,所以给每个线程都分配一个缓存存储各自线程的锁,线程之间不影响,提高吞吐量,也保证了数据的安全性) -
-XX:+PrintTLAB
打印TLAB
的使用情况 -
-XX:TLABSize
设置TLAB
的大小