主要参数设置方法
查看所有的参数的默认初始值:
-XX:PrintFlagsInitial
查看所有参数的最终值(可能会存在修改,不再是初始值):
-XX:+PrintFlagsFinal
具体查看某个参数的指令:
jps:查看当前运行中的进程
jinfo -flag SurvivorRation 进程id
初始堆空间内存(默认为物理内存的1/64):
-Xms
最大堆空间内存(默认为物理内存的1/4):
-Xmx
设置新生代的大小(初始值以及最大值):
-Xmn
配置新生代和老年代在堆结构的占比:
-XX:NewRation
设置新生代中Eden
和S0/S1
空间的比例:
-XX:SurvivorRation
设置新声代垃圾的最大年龄:
-XX:MaxTenuringThreshold
输出详细的GC
处理日志:
-XX:+PrintGCDetails
打印GC
的简要信息:
-XX:+PrintGC
-verbose:gc
是否设置空间分配担保:
-XX:HandlePromotionFailure
启动Server
模式,因为只有在Server
模式下,才可以启用逃逸分析:
-server
启用逃逸分析:
-XX:+DoEscapeAnalysis
开启标量替换:允许将对象打散分配在栈上,比如对象拥有id
和name
两个字段,那么这两个字段将会被视为两个独立的局部变量进行分配。
-XX:+EliminateAllocations
空间分配担保规则
在发生Minor GC
之前,虚拟机会检查老年代最大可用的连续空间是否大于新生代所有对象的总空间。
(1)如果大于,则此次Minor GC
是安全的。
(2)如果小于,则虚拟机会查看-XX:HandlePromotionFailure
设置值是否允许担保失败。
- 如果
HandlePromotionFailure=true
,那么会继续检查老年代最大可用连续空间是否大于历次晋升到老年代的对象的平均大小。
(1) 如果大于,则尝试进行一次Minor GC
,但这次Minor GC
仍然是有风险的。
(2) 如果小于,则改为进行一次Full GC
。 - 如果
HandlePromotionFailure=false
,则改为进行一次Full GC
。
JDK7之后的规则为:
只要老年代连续空间大于新生代对象总大小或者历次晋升的平均大小就会进行Minor GC
,否则进行Full GC
。