1.不要手动设定新生代喝老年代的大小,只要设置整个堆的大小就行
因为G1收集器在运行过程中会自己调整新生代和老年代的大小,其实是通过adapt代的大小调整对象晋升的速度和年龄,从而达到收集器设置的暂停时间目标,如果手动设置就意味着放弃了G1的自动调优;
2.不断调优暂停时间目标
一般情况下设置为100ms到200ms都是可以的,不同情况下会不一样,但是如果设置成50ms就不太合理,因为暂停时间设置的太短,就会导致G1跟不上垃圾产生的速度,最终退化为FULL GC,所以对这个参数的调优是一个持续的过程,逐步调整到最佳状态,暂停时间只是一个目标,并不是总能得到满足的;
3.使用 -XX:ConcGCThreads = n来增加标记线程的数量
IHOP如果阈值设置的过高,可能会遇到转移失败的风险,比如对象进行转移时空间不足,如果阈值设置过低,就会是标记周期进行过于频繁,并且有可能回合手机期回收不到空间
IHOP如果设置的合理,但是在并发周期过长时,可以尝试增加并发线程数
4.MixedGC调优
-XX:InitiatingHeapOccupancyPercent
-XX:G1MixedGCLiveThresholdPercent
-XX:G1MixedGCCountTarger
-XX:G1OldSetRegionThresholdPercent
5.适当增加堆内存大小
6.不正常的Full GC
系统启动时,发生一次Full GC,但是老年代空间比较充足,一般是由于Meta Space 区域引起的,可以通过增加MetaSpaceSize适当增加其大小,比如256M