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辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容