news 2026/4/17 7:54:40

常见的垃圾回收器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
常见的垃圾回收器

目录

常见的垃圾回收器

串行垃圾收集器

并行垃圾收集器

并发垃圾收集器

总结

CMS的介绍

G1的介绍

特点

四个阶段


常见的垃圾回收

并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程处于STW状态。

并发(Concurrent:指用户线程与垃圾收集线程同时执行,用户线程绝大部分时间是运行状态。可能会出现极短时间的STW状态

串行垃圾收集器

  • Serial(读音:西瑞哦)收集器(复制算法):新生代单线程收集器,标记和清理都是单线程,优点是简单高效;全程STW

  • Serial Old收集器 (标记-整理算法):老年代单线程收集器,Serial收集器的老年代版本;全程STW

并行垃圾收集器

  • ParNew(读音:帕尔纽)收集器 (复制算法): 新生代收并行集器,实际上是Serial收集器的多线程版本,在多核 CPU环境下有着比Serial更好的表现;全程STW

  • Parallel Scavenge(读音:帕瑞勒 斯凯文吉)收集器 (复制算法): 新生代并行收集器,追求高吞吐量,高效利用 CPU;全程STW

  • Parallel Old收集器 (标记-整理算法): 老年代并行收集器,吞吐量优先,Parallel Scavenge收集器的老年代版本;全程STW

并发垃圾收集器

  • CMS(Concurrent Mark Sweep)收集器(标记-清除算法): 老年代并发收集器,以获取最短回收停顿时间为目标的收集器,具有并发收集、低停顿的特点,追求最短GC回收停顿时间

  • G1(Garbage First)收集器 (标记-整理算法): Java堆并行收集器,G1收集器是JDK1.7提供的一 个新收集器,G1收集器基于“标记-整理”算法实现,也就是说不会产生内存碎片。此外,G1收集器不同于之前的收集器的一个重要特点是:G1回收的范围是整个Java堆(包括新生代,老年代),而前六种收集器回收的范围仅限于新生代或老年代。

总结

新生代收集器:Serial、 ParNew 、 Parallel Scavenge

老年代收集器: CMS 、Serial Old、Parallel Old

整堆收集器: G1

CMS的介绍

CMS是老年代并发垃圾收集器, 采取标记清除算法, 追求最短GC回收停顿时间, 优点是并发收集, 低停顿.

CMS 处理过程有四个步骤:

  1. 初始标记,指的是寻找所有被 GCRoots 引用的对象,该阶段需要STW。这个步骤仅仅只是标记一下 GC Roots 能直接关联到的对象,并不需要做整个引用的扫描,因此速度很快。

  2. 并发标记,指的是对「初始标记阶段」标记的对象进行整个引用链的扫描,该阶段与用户线程同时运行, 不需要STW

  3. 重新标记,指的是对「并发标记」阶段出现的问题进行校正,该阶段需要STW.由于垃圾回收算法和用户线程并发执行,虽然能降低响应时间,但是会发生漏标(存活对象被标为垃圾)和多标(垃圾对象被标为存活)的问题。

  4. 并发清除,指的是将标记为垃圾的对象进行清除,该阶段与用户线程同时运行, 不需要STW.CMS 之所以能极大地降低 GC 停顿时间,本质上是将原本冗长的引用链扫描进行切分。通过 GC 线程与用户线程并发执行,加上重新 标记校正的方式,减少了垃圾回收的时间。

CMS缺点

  • 多线程并发处理, 吃CPU资源

  • 无法处理浮动垃圾, 在 CMS 进行并发清理的时候,用户线程同时在运行,也会产生一些浮动垃圾。

  • 采用标记清除算法会产生空间碎片

G1的介绍

特点

  • 同时注重吞吐量(Throughput)和低延迟(Low latency)

  • 将堆内存化整为零,会将堆划分为多个大小相等的Region, 内存的回收是以region作为基本单位的

Region是 G1 垃圾收集器的核心设计概念。简单说,Region 是 G1 将整个堆内存划分成的大小相等的内存块,这是 G1 与之前所有收集器的根本区别。

  • 整体上看是标记整理算法,微观上看两个区域之间是复制算法

四个阶段

  • 初始标记 (需要STW)

  1. 标记了从GC Root开始直接关联可达的对象

  • 并发标记(不需要STW)

  1. 在老年代占用堆空间比例到达阈值时, 从GC Root开始对堆中对象进行可达性分析, 递归扫描整个堆里的对象图, 标记出所有回收对象

  2. 和用户程序并发执行, 不会STW

  • 最终标记 (需要STW)

  1. 由于并发标记阶段允许用户线程工作,可能会出现漏标,错标问题

  2. 使用SATB算法处理漏标问题,错标允许存在,下次回收即可

  3. 确定本次要回收的Region集合

  • 筛选回收 (需要STW)

  1. 先对Region的回收价值进行排序,然后根据期望暂停时间,选择性回收Region

  2. 不追求一次全部清理完, 优先回收垃圾最多的区域

  3. 回收时采用复制算法,多条收集器线程并发执行

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 18:59:44

基于Java+SpringBoot+SSM办公管理系统(源码+LW+调试文档+讲解等)/办公系统/管理系统/办公自动化系统/企业办公管理系统/智能办公管理系统/协同办公管理系统

博主介绍 💗博主介绍:✌全栈领域优质创作者,专注于Java、小程序、Python技术领域和计算机毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2025-2026年最新1000个热门Java毕业设计选题…

作者头像 李华
网站建设 2026/4/12 1:07:33

**发散创新:AI寻路算法的设计与实现**随着人工

发散创新:AI寻路算法的设计与实现 随着人工一、引言 随着机器学习、深度学习等技术的不断进步,AI在路径规划、寻路算法等领域的应用逐渐显现。本文将介绍一种新型的AI寻路算法,该算法能够自动学习并优化寻路策略,提高寻路效率。 三…

作者头像 李华
网站建设 2026/4/17 0:47:33

新手必看:Altium Designer中过孔建模与仿真配置

Altium Designer过孔建模实战:从“画个孔”到精准仿真,新手避坑全指南 你有没有遇到过这种情况——电路板第一次投板,信号测试时却发现眼图闭合、误码频发?查来查去,问题居然出在那个你认为“最不起眼”的小过孔上&…

作者头像 李华
网站建设 2026/4/16 14:00:27

实测!2026制造业数字人TOP4榜单:谁能真正适配产线刚性需求?

TOP1:集之互动核心优势与技术特点集之互动数字人凭借三大核心技术优势稳居榜首。其0.8秒实时问答响应体系在产线实时交互场景中展现出压倒性优势。低成本端侧推理技术通过本地化轻量模型部署结合流式计算,将综合交互成本降至竞品的1/5,真正实…

作者头像 李华
网站建设 2026/4/16 14:00:27

013-webpack:新东方

网站地址:新东方 找加密参数定位 只需要逆向sign即可: 我们直接xhr断点: 打上断点看看怎么个事儿: 然后我们看看ot是啥: 直接看sign生成的位置发现t竟然是刚才那个对象转化成的字符串,后面那个Ye.b是一个…

作者头像 李华