当前位置: 首页 > news >正文

JVM 垃圾回收器分类及其特点详解

JVM 的垃圾回收(Garbage Collection, GC)主要分为 分代回收模型 下的不同垃圾回收器(Garbage Collectors),每种回收器针对不同场景设计。以下是常见的垃圾回收器分类及其特点:


1. 按工作模式分类

垃圾回收器特点适用场景
Serial 收集器单线程执行 GC,全程 Stop-The-World(STW)客户端应用、资源受限环境(如嵌入式)
Parallel(吞吐量优先)收集器多线程并行执行 GC,追求高吞吐量(-XX:+UseParallelGC后台计算、批处理任务
CMS(Concurrent Mark-Sweep)收集器并发标记清除,减少 STW 时间(-XX:+UseConcMarkSweepGC对延迟敏感的老年代回收(JDK 9 前)
G1(Garbage-First)收集器分区化堆内存,可预测停顿时间(-XX:+UseG1GCJDK 9+ 默认大内存、低延迟要求的应用
ZGC(Z Garbage Collector)基于染色指针和读屏障,STW 极短(-XX:+UseZGC,JDK 15+ 生产可用)超大堆(TB 级)、超低延迟
Shenandoah 收集器类似 ZGC,通过 Brooks 指针实现并发压缩(-XX:+UseShenandoahGC低延迟、高吞吐量混合场景

2. 按分代模型分类

JVM 堆内存通常分为 新生代(Young Generation)老年代(Old Generation),不同区域使用不同回收策略:

新生代回收器
  • Serial:单线程复制算法(Minor GC)。
  • ParNew:多线程版 Serial,配合 CMS 使用。
  • Parallel Scavenge:多线程复制算法,追求吞吐量。
老年代回收器
  • Serial Old:单线程标记-整理算法(Major GC)。
  • Parallel Old:多线程标记-整理算法,配合 Parallel Scavenge。
  • CMS:并发标记-清除算法(减少 STW,但可能产生内存碎片)。
  • G1/ZGC/Shenandoah:不分代或逻辑分代,统一处理全堆。

3. 核心算法

不同回收器基于以下算法实现:

  1. 标记-清除(Mark-Sweep)
    • 标记存活对象,清除未标记对象(CMS 使用)。
    • 缺点:内存碎片化。
  2. 标记-整理(Mark-Compact)
    • 标记存活对象后,整理到内存一端(Serial Old、Parallel Old 使用)。
    • 优点:避免碎片。
  3. 复制算法(Copying)
    • 将存活对象复制到新区域(新生代 Survivor 区使用)。
    • 优点:无碎片,但内存利用率低。

4. 如何选择垃圾回收器?

场景需求推荐回收器
小型应用、低资源消耗Serial / Serial Old
高吞吐量(如后台计算)Parallel Scavenge + Parallel Old
低延迟(如 Web 服务)G1 / CMS(JDK 8)
超大堆内存、极致低延迟ZGC / Shenandoah

5. 参数示例

# 使用 G1 回收器(JDK 8+)
-XX:+UseG1GC

# 使用 ZGC(JDK 11+)
-XX:+UseZGC

# 设置最大堆内存和停顿时间目标(G1)
-Xmx4g -XX:MaxGCPauseMillis=200

总结

  • Serial/Parallel/CMS:适用于传统分代模型。
  • G1:平衡吞吐量和延迟,JDK 9+ 默认。
  • ZGC/Shenandoah:面向未来,适用于超大堆和亚毫秒级停顿。

选择合适的垃圾回收器需结合 应用性能需求(吞吐量、延迟)、堆内存大小JDK 版本 综合评估。

相关文章:

  • TypeScript语言的计算机视觉
  • 前端性能优化回答思路
  • 【自学笔记】Redis基础知识点总览-持续更新
  • 移除元素(快慢指针)
  • 测试工作内容
  • 产品更新丨谷云科技ETLCloud 3月更新速递
  • 破解大数据密码:蓝耘Maas平台与阿里QWQ的智能分析革命
  • [MAVEN][经验总结]MAVEN_HOME和M2_HOME的配置建议
  • Linux-数据结构-线性表-单链表
  • 【计量地理学】实验一 地理数据的基本统计分析
  • Cluster Computer(SCI1区)投稿常见问题
  • 解决 Jupyter Notebook 中本地模块修改不生效的问题
  • SpringSecurity配置(自定义登录URI)
  • 【回归算法解析系列07】决策树回归(Decision Tree Regressor)
  • 【C++】树和二叉树的实现(上)
  • P1115 最大子段和(前缀和详解)c++
  • 力扣hot100二刷——二叉树
  • QT编译器mingw与msvc区别及环境配置
  • dfs(十三)206. 反转链表
  • 整合Thymeleaf
  • 国际博物馆日|航海博物馆:穿梭于海洋神话与造船工艺间
  • 国际博物馆日|在辽宁省博物馆遇见敦煌
  • 2025全球城市科技传播能力指数出炉,上海位列第六
  • 美国新泽西客运公司遭遇罢工:40年来首次,35万人受影响
  • 特朗普称即将与伊朗达成核协议,外交部:中方愿继续发挥建设性作用
  • 圆桌丨新能源车超充技术元年,专家呼吁重视电网承载能力可能面临的结构性挑战