自贡市网站建设_网站建设公司_虚拟主机_seo优化
2026/1/16 15:55:06 网站建设 项目流程

目录

常见的垃圾回收器

串行垃圾收集器

并行垃圾收集器

并发垃圾收集器

总结

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询