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

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 版本 综合评估。


http://www.kler.cn/a/590038.html

相关文章:

  • 【新人系列】Golang 入门(六):函数基础
  • 用uv管理python环境/项目(各种应用场景)
  • Linux中Tomcat、idea和MySQL的安装
  • 【论文笔记】Contrastive Learning for Compact Single Image Dehazing(AECR-Net)
  • 计组错题笔记
  • 【Docker】-Docker Compose+Dockerfile最佳实践
  • 百度正式发布文心大模型 4.5 及文心大模型 X1
  • 深入理解 HTML 字符实体:解决特殊字符显示难题
  • axios防止重复请求
  • 提高开发效率:公共字段自动化填充方案
  • LeetCode134☞加油站
  • 【农业大数据处理与应用】实验二 随机森林算法与LSTM循环神经网络
  • 来客推商城V3多用户uni-app商城源码怎么样?
  • Spark DataFrame、Dataset 和 SQL 解析原理深入解析(万字长文多张原理图)
  • 嵌入式Linux | 什么是 BootLoader、Linux 内核(kernel)、和文件系统?
  • 对最近的刷题做一个小总结(关于动态规划和贪心)
  • LVDS(Low Voltage Differential Signaling)电平详解
  • 【每日学点HarmonyOS Next知识】上下拉列表、停止无限循环动画、页面列表跟随列表滑动、otf字体、日期选择
  • Linux目录理解
  • 海外红人营销助力游戏出海:从单一营销到生态构建的转变