JVM学习笔记之垃圾收集器【五】

2021-01-10  本文已影响0人  JiaJianHuang

垃圾收集器

HotSpot 包含的垃圾收集器

image

一、串行收集器

1.1、Serial 收集器

1.2、Serial Old 收集器

Serial Old 是 Serial 收集器的老年代版本,它同样是一个单线程收集器,使用标记-整理算法。

image-20201220204351963

二、并行收集器

2.1、并行与并发的概念

2.2、ParNew 收集器

ParNew 收集器实质上是 Serial 收集器的多线程并行版本,除了同时使用多条线程进行垃圾收集之外,其余的行为包括 Serial 收集器可用的所有控制参数(例如:-XX:SurvivorRatio、-XX:PretenureSizeThreshold、-XX:HandlePromotionFailure 等)、收集算法、Stop The World、对象分配规则、回收策略等都与 Serial 收集器完全一致。

2.3、Parallel Scavenge 收集器

Parallel Scavenge 收集器也是一款新生代收集器,它同样是基于标记-复制算法实现的收集器,也是能够并行收集的多线程收集器。

2.4、Parallel Old 收集器

Parallel Old 是 Parallel Scavenge 收集器的老年代版本,支持多线程并发收集,基于标记-整理算法实现。这个收集器是直到 JDK 6 时才开始提供的。在注重吞吐量或者处理器资源较为稀缺的场合,都可以优先考虑 ParallelScavenge 加 Parallel Old 收集器这个组合

image-20201225000456022

三、CMS 收集器

CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。也是基于标记—清除算法实现的。

3.1、运作过程

3.2、运行示意图

image-20201227225103577

3.3、优缺点

浮动垃圾:在 CMS 的并发标记和并发清理阶段,用户线程是还在继续运行的,程序在运行自然就还会伴随有新的垃圾对象不断产生,但这一部分垃圾对象是出现在标记过程结束以后,CMS 无法在当次收集中处理掉它们,只好留待下一次垃圾收集时再清理掉。这一部分垃圾就称为“浮动垃圾”。

3.4 虚拟机参数

四、Garbage First 收集器(G1)

4.1 G1 介绍

Garbage First(简称 G1)收集器是垃圾收集器技术发展历史上的里程碑式的成果,它开创了收集器面向局部收集的设计思路和基于 Region 的内存布局形式。G1 是一款主要面向服务端应用的垃圾收集器。

4.2、G1 设计思路

4.3、G1 内存布局形式示意图

image-20201228005019666

4.4 G1 收集器的运作过程

image-20201228010842270

4.5、虚拟机参数

六、低延迟收集器

image-20210102154219862

从上图中可以看到,最后的两款收集器,Shenandoah 和 ZGC,几乎整个工作过程全部都是并发的,只有初始标记、最终标记这些阶段有短暂的停顿,这部分停顿的时间基本上是固定的,与堆的容量、堆中对象的数量没有正比例关系。

6.1 Shenandoah 收集器

image-20210102163400524

6.2 ZGC 收集器

ZGC 和 Shenandoah 的目标是高度相似的,都希望在尽可能对吞吐量影响不太大的前提下,实现在任意堆内存大小下都可以把垃圾收集的停顿时间限制在十毫秒以内的低延迟。

image-20210107215333885
上一篇下一篇

猜你喜欢

热点阅读