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

embedded/2025/3/31 22:42:52/

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.ppmy.cn/embedded/174605.html

相关文章

Ubuntu 24 常用命令方法

文章目录 环境说明1、账号管理1.1、启用 root 2、包管理工具 apt & dpkg2.1、apt 简介 & 阿里源配置2.2、dpkg 简介2.3、apt 和 dpkg 两者之间的关系2.4、常用命令 3、启用 ssh 服务4、防火墙5、开启远程登录6、关闭交换分区7、build-essential(编译和开发软…

碰一碰发视频saas系统技术源头一站式开发文档

碰一碰发视频系统技术源头一站式开发文档 一、引言 在数字化信息传播高速发展的当下,如何让视频分享更便捷、高效,成为商家和开发者们关注的焦点。“碰一碰发视频”系统以其独特的交互方式和强大的功能优势,为视频分享领域带来了革命性变革。…

idea问题(三)pom文件显示删除线

一、问题 1、现象 2、原因 分析原因和出现的流程:创建子模块的时候因为名称错误了,并且通过修改模块模块名称后,又删除了模块,因删除不干净。再次建立了同名模块,会让IDEA认为你再次新建的项目是已经被删除的项目。 …

汽车安全确认等级-中国等保

1、概念解析 网络安全保证等级(Cybersecurity Assurance Level)通常指在不同标准或框架下,根据系统或数据的敏感性、重要性以及潜在风险划分的等级,用于指导组织采取相应的安全防护措施。以下是几个常见的网络安全保证等级体系及…

Excel(函数进阶篇):Vlookup函数进阶、TAKE嵌套SORE函数、SUBTOTAL函数、INDIRECT函数

目录 Vlookup函数返回多列结果Vlookup函数多条件匹配Vlookup函数部分匹配TAKE函数嵌套SORT函数,提取排序数据SUBTOTAL函数:制作动态报表SUBTOTAL函数:创建连续编号INDIRECT函数Vlookup跨多表抓取数据INDIRECT函数常见跨表的错误Vloopup函数联…

为什么labelme框选图片后闪退

Labelme 软件框选图片后闪退的解决方案 Labelme 是一种常用的图像标注工具,但在实际使用过程中可能会遇到一些问题,比如框选图片后程序突然闪退。以下是针对该问题的具体分析和解决方法: 可能原因及对应解决措施 标签文件异常 如果某些图片…

Windows安装Python3【超详细图解】

目录 一、下载 二、安装 三、验证 一、下载 官方Windows系统各种版本https://www.python.org/downloads/windows/ 可以下最新的,但很多老项目并不支持最新版本的,还是推荐下老版本 找一个自己需要的版本,选择适合自己电脑系统架构和位数…

Deepseek r1 本地部署

1.环境需求: 1. 独显 2. 最好32g内存 3. 安装 ollama https://ollama.com/download/windows 2. 安装 deepseek-r1 https://ollama.com/library/deepseek-r1 根据显存选择对应大小的模型,推荐能将整个模型放入显存的大小,放…