JVM深入学习(二十三)-下一代垃圾回收器

简介: 下一代垃圾回收器以并发回收为目的,亚毫秒级的停顿时间为目标,极大的提高了垃圾回收的效率

1. Shenandoah

RedHat发布于OpenJdk上的一款低延迟垃圾回收器.

网址: https://wiki.openjdk.java.net/display/shenandoah/Main

注: 只在OpenJdk中存在,不在Oracle官方版本中发布.

且根据Shenandoah官方信息,目前只在jdk8/11/17中支持,其他jdk版本都已经停止维护

Shenandoah的特性:

Shenandoah is the low pause time garbage collector that reduces GC pause times by performing more garbage collection work concurrently with the running Java program. Shenandoah does the bulk of GC work concurrently, including the concurrent compaction, which means its pause times are no longer directly proportional to the size of the heap. Garbage collecting a 200 GB heap or a 2 GB heap should have the similar low pause behavior.

翻译过来就是:

Shenandoah 是低暂停时间的垃圾收集器,它通过在运行 Java 程序的同时执行更多的垃圾收集工作来减少 GC 暂停时间。Shenandoah 并发执行大部分 GC 工作,包括并发压缩,这意味着它的暂停时间不再与堆大小成正比。收集 200 GB 堆或 2 GB 堆的垃圾应该具有类似的低暂停行为。

且官网说明: 暂停时间一般都在10ms下

In most cases, the pause times are within 0..10ms and throughput losses are within 0..15%.

实际情况,可能并非如此,但是不可否认的是Shenandoah在低延迟方面确实优于G1,CMS和Parallel,属于用吞吐量降低换取低延迟的一款垃圾回收器.

这个垃圾器不在详细说明具体的垃圾回收过程,需要的话去官网查看就行.

因为Oracle官方不收录这个垃圾回收器,只是在OpenJdk里有这个垃圾回收器,重点还是放在Oracle官方的ZGC上.

2. ZGC

ZGC与Shenandoan的目标一致,都是准求高吞吐量的前提下,把停顿时间降低到10ms之内.

相比于Shenandoan,ZGC的效果非常好.

官网: https://docs.oracle.com/en/java/javase/17/gctuning/introduction-garbage-collection-tuning.html

ZGC在jdk11发布时还是一个实验性的功能

在jdk15时转正,摘掉了实验性功能的帽子

目前每个jdk版本都在优化,在未来应该是要替代G1的位置.

ZGC也是基于region的垃圾回收器,与G1不同的是,ZGC把并发做到了极致,除了初始标记阶段仍然是STW的,其他部分全部都是并发执行的,所以才能做到10ms以内的低停顿时间.

2.1 启用ZGC

-XX:+UseZGC

目前jdk17中还没有将ZGC作为默认垃圾回收器,所以需要使用上述参数启用ZGC.

2.2 常用调优参数

https://wiki.openjdk.java.net/display/zgc/Main#Main-Configuration&Tuning

2.3 总结

ZGC由于还不是Oracle官方的默认jdk,这样的话当前还是以G1为主,不过相信在未来的几个版本里ZGC肯定是要替代G1的,毕竟以目前的测试性能来看,无论是吞吐量还是低停顿时间,ZGC的性能都要高于G1.

3. 其他厂商垃圾回收器

其他厂商也有自己的定制垃圾回收期,例如阿里的taobaoVM中的AliGC,主要是针对大堆引用优化的

还有Zing这样的收费JVM,有兴趣可以了解一下

Zing最初应该也是从Sun买的许可证..

目录
相关文章
|
2天前
|
安全 算法 Java
深入浅出JVM(十三)之垃圾回收算法细节
深入浅出JVM(十三)之垃圾回收算法细节
|
2天前
|
存储 算法 Java
深入浅出JVM(十二)之垃圾回收算法
深入浅出JVM(十二)之垃圾回收算法
|
2天前
|
算法 Java PHP
JVM 的垃圾回收机制以及垃圾回收算法的详解
JVM 的垃圾回收机制以及垃圾回收算法的详解
9 0
|
3天前
|
监控 算法 安全
JVM工作原理与实战(三十九):G1垃圾回收器原理
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了G1垃圾回收器执行流程、年轻代回收原理、卡表(Card Table)、记忆集的生成流程、年轻代回收的详细步骤、混合回收的步骤、初始标记、并发标记、SATB、转移等内容。
13 0
|
4天前
|
存储 监控 算法
JVM工作原理与实战(二十七):堆的垃圾回收-G1垃圾回收器
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了G1垃圾回收器、G1垃圾回收器的回收方式、G1垃圾回收器执行流程、垃圾回收器的选择等内容。
|
4天前
|
机器学习/深度学习 监控 算法
JVM工作原理与实战(二十六):堆的垃圾回收-垃圾回收器
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了垃圾回收器、Serial垃圾回收器、SerialOld垃圾回收器、ParNew垃圾回收器、CMS垃圾回收器、Parallel Scavenge垃圾回收器、Parallel Old垃圾回收器等内容。
11 0
|
4天前
|
Arthas 监控 算法
JVM工作原理与实战(二十五):堆的垃圾回收-垃圾回收算法
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了垃圾回收算法评价标准、标记清除算法、复制算法、标记整理算法、分代垃圾回收算法等内容。
18 0
JVM工作原理与实战(二十五):堆的垃圾回收-垃圾回收算法
|
4天前
|
存储 缓存 监控
JVM工作原理与实战(二十四):堆的垃圾回收-对象引用
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了强引用、软引用、弱引用、虚引用、终结器引用等内容。
11 0
|
4天前
|
监控 算法 安全
JVM工作原理与实战(二十三):堆的垃圾回收-引用计数法和可达性分析法
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了判断堆上的对象是否可以回收的方法(引用计数法、可达性分析法)、查看垃圾回收日志等内容。
12 0
|
4天前
|
存储 监控 安全
JVM工作原理与实战(二十二):方法区的垃圾回收
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了Java的内存管理和自动垃圾回收、方法区的垃圾回收等内容。
10 0