首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >CMS和G1的7点区别

CMS和G1的7点区别

作者头像
码农戏码
发布2026-06-25 19:52:59
发布2026-06-25 19:52:59
1100
举报

简单来说:

CMS 是追求极致低延迟但存在碎片化风险的“老将”

G1 是兼顾吞吐量和可控延迟、专为大堆设计、能有效管理碎片的“现代主力”

CMS和G1的7点区别

CMS和G1的7点区别
CMS和G1的7点区别

Concurrent Mode Failure

Concurrent Mode Failure (CMF) 是 CMS (Concurrent Mark-Sweep) 垃圾回收器特有的一种失败场景,指的是 在并发回收(主要是并发清除阶段)过程中,应用程序需要分配对象到老年代,但老年代空间不足以满足此次分配(或晋升)需求,迫使 CMS 中断并发回收过程,转而触发一次代价高昂的 Full GC(通常是 Serial Old GC) 来回收整个堆(包括新生代和老年代),导致应用线程长时间停顿(STW)

晋升失败 (Promotion Failed)

这是 CMF 最常见、最直接的表现形式之一。新生代进行 Minor GC 时,需要将存活对象晋升到老年代。

原因:

1、老年代剩余空间 总量不足 容纳所有要晋升的对象。

2、老年代有 总量足够的空闲空间,但因碎片化没有足够大的连续空间来晋升某个/某些较大对象。

晋升失败会立即触发 CMF,导致 Full GC (Serial Old)。

CMS的优缺点

优点:

针对老年代的垃圾回收,能显著减少停顿时间,提升应用性能。

采用了并发标记清除算法,回收过程中不需要完全停止其他应用线程,提高了系统的吞吐量。

缺点:

由于采用标记清除算法,容易产生内存碎片,可能导致后续对象分配时出现空间不足的问题。

对于大型堆或存在大量存活对象的场景,CMS的性能可能不佳,回收效率降低。

G1的优缺点

优点:

停顿时间短且可预测,用户可以根据实际需求指定最大停顿时间,满足应用的性能要求。

通过将堆划分为多个Region,实现了空间的整合,降低了内存碎片的产生,提高了内存的利用率。

G1的内存布局允许其从整体上基于“标记-整理”算法实现垃圾回收,但在局部上又基于“标记-复制”算法实现,这种混合算法使得G1在内存管理方面更加高效和灵活。

缺点:

G1需要维护一个记忆集(具体来说是卡表)来记录新生代和老年代之间的引用关系,这种数据结构需要占用大量的内存资源,可能达到整个堆内存容量的20%甚至更多。

G1中维护记忆集的成本较高,带来了更高的执行负载,可能对系统的整体性能产生一定的影响。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农戏码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CMS和G1的7点区别
    • Concurrent Mode Failure
    • 晋升失败 (Promotion Failed)
  • CMS的优缺点
    • 优点:
    • 缺点:
  • G1的优缺点
    • 优点:
    • 缺点:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档