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

目录
相关文章
|
5月前
|
Arthas 存储 算法
深入理解JVM,包含字节码文件,内存结构,垃圾回收,类的声明周期,类加载器
JVM全称是Java Virtual Machine-Java虚拟机JVM作用:本质上是一个运行在计算机上的程序,职责是运行Java字节码文件,编译为机器码交由计算机运行类的生命周期概述:类的生命周期描述了一个类加载,使用,卸载的整个过类的生命周期阶段:类的声明周期主要分为五个阶段:加载->连接->初始化->使用->卸载,其中连接中分为三个小阶段验证->准备->解析类加载器的定义:JVM提供类加载器给Java程序去获取类和接口字节码数据类加载器的作用:类加载器接受字节码文件。
490 55
|
10月前
|
监控 算法 Java
Java虚拟机(JVM)垃圾回收机制深度剖析与优化策略####
本文作为一篇技术性文章,深入探讨了Java虚拟机(JVM)中垃圾回收的工作原理,详细分析了标记-清除、复制算法、标记-压缩及分代收集等主流垃圾回收算法的特点和适用场景。通过实际案例,展示了不同GC(Garbage Collector)算法在应用中的表现差异,并针对大型应用提出了一系列优化策略,包括选择合适的GC算法、调整堆内存大小、并行与并发GC调优等,旨在帮助开发者更好地理解和优化Java应用的性能。 ####
243 27
|
11月前
|
监控 算法 Java
Java虚拟机(JVM)的垃圾回收机制深度解析####
本文深入探讨了Java虚拟机(JVM)的垃圾回收机制,旨在揭示其背后的工作原理与优化策略。我们将从垃圾回收的基本概念入手,逐步剖析标记-清除、复制算法、标记-整理等主流垃圾回收算法的原理与实现细节。通过对比不同算法的优缺点及适用场景,为开发者提供优化Java应用性能与内存管理的实践指南。 ####
|
5月前
|
缓存 算法 Java
JVM深入原理(八)(一):垃圾回收
弱引用-作用:JVM中使用WeakReference对象来实现软引用,一般在ThreadLocal中,当进行垃圾回收时,被弱引用对象引用的对象就直接被回收.软引用-作用:JVM中使用SoftReference对象来实现软引用,一般在缓存中使用,当程序内存不足时,被引用的对象就会被回收.强引用-作用:可达性算法描述的根对象引用普通对象的引用,指的就是强引用,只要有这层关系存在,被引用的对象就会不被垃圾回收。引用计数法-缺点:如果两个对象循环引用,而又没有其他的对象来引用它们,这样就造成垃圾堆积。
157 0
|
5月前
|
算法 Java 对象存储
JVM深入原理(八)(二):垃圾回收
Java垃圾回收过程会通过单独的GC线程来完成,但是不管使用哪一种GC算法,都会有部分阶段需要停止所有的用户线程。这个过程被称之为StopTheWorld简称STW,如果STW时间过长则会影响用户的使用。一般来说,堆内存越大,最大STW就越长,想减少最大STW,就会减少吞吐量,不同的GC算法适用于不同的场景。分代回收算法将整个堆中的区域划分为新生代和老年代。--超过新生代大小的大对象会直接晋升到老年代。
110 0
|
7月前
|
缓存 监控 算法
JVM简介—2.垃圾回收器和内存分配策略
本文介绍了Java垃圾回收机制的多个方面,包括垃圾回收概述、对象存活判断、引用类型介绍、垃圾收集算法、垃圾收集器设计、具体垃圾回收器详情、Stop The World现象、内存分配与回收策略、新生代配置演示、内存泄漏和溢出问题以及JDK提供的相关工具。
JVM简介—2.垃圾回收器和内存分配策略
|
11月前
|
机器学习/深度学习 监控 算法
Java虚拟机(JVM)的垃圾回收机制深度剖析####
本文深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法、性能调优策略及未来趋势。通过实例解析,为开发者提供优化Java应用性能的思路与方法。 ####
238 28
|
10月前
|
算法 网络协议 Java
【JVM】——GC垃圾回收机制(图解通俗易懂)
GC垃圾回收,标识出垃圾(计数机制、可达性分析)内存释放机制(标记清除、复制算法、标记整理、分代回收)
|
10月前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
11月前
|
监控 算法 Java
Java虚拟机垃圾回收机制深度剖析与优化策略####
【10月更文挑战第21天】 本文旨在深入探讨Java虚拟机(JVM)中的垃圾回收机制,揭示其工作原理、常见算法及参数调优技巧。通过案例分析,展示如何根据应用特性调整GC策略,以提升Java应用的性能和稳定性,为开发者提供实战中的优化指南。 ####
139 5