网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > Java >

G1和CMS垃圾回收器的区别

时间:2025-06-12 17:24

人气:

作者:admin

标签:

导读:一、核心设计目标 CMS:尽可能减少STW(Stop-The-World)时间,实现与用户线程的高并发。 G1:兼顾低延迟和高吞吐量,在大内存场景下提供可预测的停顿时间。 二、内存管理模型 CMS 分代...

一、核心设计目标

CMS:尽可能减少STW(Stop-The-World)时间,实现与用户线程的高并发。
G1:兼顾低延迟和高吞吐量,在大内存场景下提供可预测的停顿时间。

二、内存管理模型

CMS

  • 分代设计:严格区分新生代(Eden、Survivor)和老年代,各自独立回收。
  • 内存碎片:采用 “标记 - 清除” 算法,可能产生大量内存碎片,导致 Full GC 频繁。

G1

  • Region 分区:将堆划分为多个大小相等的Region(如 2MB / 个),每个 Region 动态扮演 Eden、Survivor 或 Old 区域。
  • 跨代引用:通过 Remembered Set(RSet)记录跨 Region 引用,避免扫描整个堆。
  • Humongous 区域:专门存储大对象(超过 Region 大小的 50%),减少内存碎片。

三、GC 算法流程

CMS:

  • 初始标记(STW):标记 GC Roots 直接关联的对象。
  • 并发标记:与用户线程并行,遍历所有可达对象。
  • 重新标记(STW):修正并发期间用户线程修改的对象引用。
  • 并发清除:与用户线程并行,清理未标记的对象。
    G1:
  • 初始标记(STW):标记 GC Roots 直接关联的对象。
  • 并发标记:与用户线程并行,遍历所有可达对象。
  • 最终标记(STW):修正并发期间的引用变更。
  • 筛选回收(STW):根据 Region 的垃圾占比,优先回收价值高的 Region(Garbage-First 策略)。

四、STW 时间与性能

维度 CMS G1
STW 时间 并发标记和清除阶段不 STW,但最终标记可能较长(尤其是堆大时)。 筛选回收阶段可控制 STW 时间(通过-XX:MaxGCPauseMillis参数)。
内存碎片 标记 - 清除算法导致碎片化,可能触发 Full GC。 标记 - 整理算法(筛选回收阶段),减少碎片。
吞吐量 并发阶段不影响用户线程,但 GC 线程与用户线程竞争 CPU。 筛选回收时需 STW,但可通过调整 Region 数量优化。

五、优缺点对比

CMS:

  • 优点:低延迟(尤其在堆较小时),适合响应时间敏感的应用。
  • 缺点:
    1. 内存碎片严重,可能导致 Full GC 频繁。
    2. 并发阶段占用 CPU 资源,吞吐量下降。
    3. 无法处理浮动垃圾(并发期间新产生的垃圾)。

G1:

  • 优点:
    1. 可预测的停顿时间(通过 Region 策略)。
    2. 大内存下性能更优(如 4GB 以上)。
    3. 减少内存碎片(标记 - 整理算法)。
  • 缺点:
    2. 算法复杂度高,小内存场景下可能不如 CMS。
    3. 初始标记和筛选回收阶段仍需 STW。

建议:

  • 新应用优先考虑 G1,尤其是大内存场景。
  • 若应用对延迟极度敏感且堆较小(<4GB),可考虑 CMS,但需注意内存碎片问题。
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信