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买的许可证..

目录
相关文章
|
26天前
|
监控 算法 Java
Java虚拟机(JVM)的垃圾回收机制深度解析####
本文深入探讨了Java虚拟机(JVM)的垃圾回收机制,旨在揭示其背后的工作原理与优化策略。我们将从垃圾回收的基本概念入手,逐步剖析标记-清除、复制算法、标记-整理等主流垃圾回收算法的原理与实现细节。通过对比不同算法的优缺点及适用场景,为开发者提供优化Java应用性能与内存管理的实践指南。 ####
|
18天前
|
监控 算法 Java
Java虚拟机(JVM)垃圾回收机制深度剖析与优化策略####
本文作为一篇技术性文章,深入探讨了Java虚拟机(JVM)中垃圾回收的工作原理,详细分析了标记-清除、复制算法、标记-压缩及分代收集等主流垃圾回收算法的特点和适用场景。通过实际案例,展示了不同GC(Garbage Collector)算法在应用中的表现差异,并针对大型应用提出了一系列优化策略,包括选择合适的GC算法、调整堆内存大小、并行与并发GC调优等,旨在帮助开发者更好地理解和优化Java应用的性能。 ####
25 0
|
17天前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
21天前
|
机器学习/深度学习 监控 算法
Java虚拟机(JVM)的垃圾回收机制深度剖析####
本文深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法、性能调优策略及未来趋势。通过实例解析,为开发者提供优化Java应用性能的思路与方法。 ####
31 1
|
24天前
|
监控 算法 Java
Java虚拟机垃圾回收机制深度剖析与优化策略####
【10月更文挑战第21天】 本文旨在深入探讨Java虚拟机(JVM)中的垃圾回收机制,揭示其工作原理、常见算法及参数调优技巧。通过案例分析,展示如何根据应用特性调整GC策略,以提升Java应用的性能和稳定性,为开发者提供实战中的优化指南。 ####
40 5
|
26天前
|
存储 算法 安全
JVM常见面试题(四):垃圾回收
堆区域划分,对象什么时候可以被垃圾器回收,如何定位垃圾——引用计数法、可达性分析算法,JVM垃圾回收算法——标记清除算法、标记整理算法、复制算法、分代回收算法;JVM垃圾回收器——串行、并行、CMS垃圾回收器、G1垃圾回收器;强引用、软引用、弱引用、虚引用
|
24天前
|
存储 算法 Java
JVM进阶调优系列(10)敢向stop the world喊卡的G1垃圾回收器 | 有必要讲透
本文详细介绍了G1垃圾回收器的背景、核心原理及其回收过程。G1,即Garbage First,旨在通过将堆内存划分为多个Region来实现低延时的垃圾回收,每个Region可以根据其垃圾回收的价值被优先回收。文章还探讨了G1的Young GC、Mixed GC以及Full GC的具体流程,并列出了G1回收器的核心参数配置,帮助读者更好地理解和优化G1的使用。
|
25天前
|
监控 Java 测试技术
Elasticsearch集群JVM调优垃圾回收器的选择
Elasticsearch集群JVM调优垃圾回收器的选择
46 1
|
2月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
77 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
2月前
|
存储 监控 算法
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程 ?
尼恩提示: G1垃圾回收 原理非常重要, 是面试的重点, 大家一定要好好掌握
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程  ?