AdaptiveSizePolicy 简介
AdaptiveSizePolicy(自适应大小策略) :
JDK 1.8 默认使用 UseParallelGC 垃圾回收器,该垃圾回收器默认启动了 AdaptiveSizePolicy,会根据GC的情况自动计算计算 Eden、From 和 To 区的大小。
配置:
开启:-XX:+UseAdaptiveSizePolicy
关闭:-XX:-UseAdaptiveSizePolicy
注意事项:
1、在 JDK 1.8 中,如果使用 CMS,无论 UseAdaptiveSizePolicy 如何设置,都会将 UseAdaptiveSizePolicy 设置为 false;不过不同版本的JDK存在差异;
2、UseAdaptiveSizePolicy不要和SurvivorRatio参数显示设置搭配使用,一起使用会导致参数失效;
3、由于AdaptiveSizePolicy会动态调整 Eden、Survivor 的大小,有些情况存在Survivor 被自动调为很小,比如十几MB甚至几MB的可能,这个时候YGC回收掉 Eden区后,还存活的对象进入Survivor 装不下,就会直接晋升到老年代,导致老年代占用空间逐渐增加,从而触发FULL GC,如果一次FULL GC的耗时很长(比如到达几百毫秒),那么在要求高响应的系统就是不可取的。
对于面向外部的大流量、低延迟系统,不建议启用此参数,建议关闭该参数。
jmap -heap [PID]
From 和 To 区都比较小,只有 0.5M。容量比较小,可以看到 Eden、From、To 之间的比例不是默认的 8:1:1。
使用的是 JDK 1.8 的默认回收算法。
jinfo -flags pid 可以查看运行中的JVM参数。
使用 CMS 垃圾回收器。
CMS 默认关闭 AdaptiveSizePolicy。
配置参数:-XX:+UseConcMarkSweepGC
jinfo -flag UseAdaptiveSizePolicy pid
JVM GC 之「AdaptiveSizePolicy」实战