Java垃圾回收器比较

垃圾回收器比较

名称 是否多线程 新生代是否停顿 老年代是否停顿 是否对老年代压缩整理 备注
Serial 单线程 是 是 Full GC时整理 常用于单CPU可用的机器上
Throughput(Parallel) 多线程 是 是 Full GC时整理 server上默认收集器
CMS 多线程 是 否 后台线程不整理,无连续空间时暂停所有线程,使用单线程整理 占用CPU多,能减少Full GC
G1 多线程 是 大多数不需要暂停 老年代不大容易发生碎片化 比CMS更不容易Full GC

适用场景

Parallel和CMS比较:Parallel在并发上有优势,而CMS在响应时间上有优势。

CMS和G1比较:一般情况下,堆空间小于4G时,CMS比G1性能好;在大堆或者超大堆上GG1有优势。

调优准则

Parallel调优准则:降低GC时间百分比,GC时间百分比和堆大小关系找到一个平衡点。可以使用-XX:GCTimeRatio命令让虚拟机自行调整堆大小,以达到设置的GC时间百分比。

并发失效:由于CMS不能够以足够快的速度清理老年代:新生代需要进行垃圾回收时,CMS收集器发现老年代没有足够大小的空间容纳晋升的对象,不得不对老年代进行垃圾回收。

晋升失效:老年代有足够的空间容纳晋升对象,但是由于空间碎片化,没有连续的空间容纳晋升对象,导致晋升失败。

CMS调优准则:避免并发失效;

避免并发失效方法:

  1. 增大老年代空间。
  2. 提高后台回收线程的效率(或者使用更多的线程)。

提高后台线程效率的方法:

  1. 给后台线程更多运行的机会:使用
-XXCMSInitiatingOccupancyFraction=N
-XX:+UseCMSInitialingOccupancyOnly 

让后台线程在老年代空间被使用N%时就触发垃圾回收。

  1. 使用
-XX:ConGCThreads=N 

调整后台线程数量

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容