情形一
设置参数-Xms1024m -Xmx1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m
通过命令jmap -heap 27298
查看 jvm 内存使用情况
- 没设置
-XX:NewSize
、-XX:MaxNewSize
,默认二者相等,即图中 b = c - a = b + d,即:堆区 = 新生代 + 老年代
- e = 2,老年代 : 新生代 = 2 :1,即图中 d : b = 2 : 1
- g = h = 256,与设置参数中
-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m
一致 - f = 8,但 k : n : m != 8 : 1 : 1
情形二
设置参数-Xms1024m -Xmx1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:-UseAdaptiveSizePolicy
- 参数中设置了
-XX:-UseAdaptiveSizePolicy
,但是 k : n : m != 8 : 1 : 1
HotSpot VM里,ParallelScavenge系的GC(UseParallelGC / UseParallelOldGC)默认行为是SurvivorRatio如果不显式设置就没啥用。显式设置到跟默认值一样的值则会有效果。
因为ParallelScavenge系的GC最初设计就是默认打开AdaptiveSizePolicy的,它会自动、自适应的调整各种参数。
通过命令jinfo -flags pid
查看默认配置的 GC 算法,发现为UseParallelGC
情形三
设置参数-Xms1024m -Xmx1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:SurvivorRatio=8
- 参数中设置了
-XX:SurvivorRatio=8
, k : n : m = 8 : 1 : 1
情形四
设置参数-Xms1024m -Xmx1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:SurvivorRatio=8 -XX:-UseAdaptiveSizePolicy
- 参数中设置了
-XX:SurvivorRatio=8 -XX:-UseAdaptiveSizePolicy
, k : n : m = 8 : 1 : 1