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

常见的垃圾回收器

目录

常见的垃圾回收器

串行垃圾收集器

并行垃圾收集器

并发垃圾收集器

总结

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. 回收时采用复制算法,多条收集器线程并发执行

http://www.jsqmd.com/news/235627/

相关文章:

  • 015-MD5极志愿
  • I2S协议PCB布线关键点:零基础掌握走线规则
  • 【叶片单元动量理论】分析给定螺旋桨几何形状在不同前进比下恒定转速下的性能研究(Matlab代码实现)
  • JVM中的类加载Minor GC与Full GC
  • 基于Java+SpringBoot+SSM养老院管理系统(源码+LW+调试文档+讲解等)/养老院管理软件/养老院服务平台/养老机构管理系统/老年护理管理系统/养老院信息管理系统/养老服务管理平台
  • 模拟信号在传感器中的应用:小白入门教程
  • 11. Linux 防火墙管理
  • 实测!2026制造业数字人TOP4榜单:谁能真正适配产线刚性需求?
  • 数字孪生在智能工厂中的应用:实战案例解析
  • 016-扣代码:天翼云登录
  • 大数据SQL优化:结构化数据查询性能提升秘籍
  • 使用拍卖的多智能体系统动态分散任务分配算法(Maatlab代码实现)
  • 从零实现工业网关USB接口引脚对接
  • 2026可落地商用数字人选型指南:TOP5产品深度测评与实战对比
  • [特殊字符]️_开发效率与运行性能的平衡艺术[20260112162407]
  • 017-RSA:贝壳网登录(参数password)
  • 【SCI一区】【电动车】基于ADMM双层凸优化的燃料电池混合动力汽车研究(Matlab代码实现)
  • 013-webpack:新东方
  • [特殊字符]_微服务架构下的性能调优实战[20260112163019]
  • 12. SELinux 加固 Linux 安全
  • 报告显示:小镇青年摆脱父辈人情链,从“关系继承“走向“关系开拓“ | 美通社头条
  • 基于电力电子系统的MOSFET基本工作原理系统学习指南
  • 全网最全10个AI论文软件,助本科生搞定毕业论文!
  • [特殊字符]_可扩展性架构设计:从单体到微服务的性能演进[20260112163630]
  • 新手必看:Altium Designer中过孔建模与仿真配置
  • 面试 Java 基础八股文十问十答第七期
  • 快速理解Altium Designer的阻抗控制设置方法
  • 接口测试用例的设计方法
  • 通过QTabWidget实现多步骤向导界面的方案
  • 2百万人围观的Claude Code 实战使用指南