瞎掰JVM:内存结构---垃圾回收(三)

前面介绍了回收触发的时机和各类收集器。如何选择各类收集类,下面是5个参考标准:

  1. 优先调整堆的大小让服务器自己来选择
  2. 如果内存小于100M,使用串行收集器
  3. 如果是单核,并且没有停顿时间的要求,串行或JVM自己选择
  4. 如果允许停顿时间超过1秒,选择并行或者JVM自己选
  5. 如果响应时间最重要,并且不能超过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%的垃圾回收时间,太严苛会直接影响到吞吐量

 

发布了8 篇原创文章 · 获赞 0 · 访问量 296

猜你喜欢

转载自blog.csdn.net/nuist_nuist/article/details/102898961