前面介绍了回收触发的时机和各类收集器。如何选择各类收集类,下面是5个参考标准:
- 优先调整堆的大小让服务器自己来选择
- 如果内存小于100M,使用串行收集器
- 如果是单核,并且没有停顿时间的要求,串行或JVM自己选择
- 如果允许停顿时间超过1秒,选择并行或者JVM自己选
- 如果响应时间最重要,并且不能超过1秒,使用并发收集器
Parallel和CMS比较:Parallel在并发上有优势,而CMS在响应时间上有优势。
CMS和G1比较:一般情况下,堆空间小于4G时,CMS比G1性能好;在大堆或者超大堆上GG1有优势。
关于调优
Parallel调优准则:降低GC时间百分比,GC时间百分比和堆大小关系找到一个平衡点。可以使用-XX:GCTimeRatio命令让虚拟机自行调整堆大小,以达到设置的GC时间百分比。
常见措施:
1.设置Metaspace大小:增大元空间大小-XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=64M
2.添加吞吐量和停顿时间参数:-XX:MaxGCPauseMillis=100 -XX:GCTimeRatio=99
3.修改动态扩容增量:-XX:YoungGenerationSizeIncrement=30
CMS调优准则:避免并发失效;
常见措施:
1. 增大老年代空间。
2. 提高后台回收线程的效率(或者使用更多的线程)。
2.1给后台线程更多运行的机会
-XXCMSInitiatingOccupancyFraction=N
-XX:+UseCMSInitialingOccupancyOnly
2.2调整后台线程数量
-XX:ConGCThreads=N
G1 调优准则:在暂停时间和吞吐量之间达到平衡
常见措施:
1. 设置年轻代大小:避免使用-Xmn、-XX:NewRatio等显示设置Young区大小,会覆盖暂停时间目标(常用参数3)
2. 暂停时间目标:暂停时间不要太严苛,其吞吐量目标是90%的应用程序时间和10%的垃圾回收时间,太严苛会直接影响到吞吐量