新世代垃圾回收器

新世代垃圾回收器(学习笔记)

相关博客:
Serial与Serial Old垃圾回收器
ParNew垃圾回收器
Parallel与Parallel Old垃圾回收器
CMS垃圾回收器
G1垃圾回收器

7种垃圾回收器的变化情况

  • GC仍然处于飞速发展之中,目前的默认选项G1 GC在不断的进行改进,很多我们原来认为的缺点,例如串行的Full GC、Card Table扫描的低效等,都已经被大幅改进,例如,JDK10以后,Full GC已经是并行运行,在很多场景下,其表现还略优于ParallelGC的并行Full GC实现。
  • 即使是SerialGC,虽然比较古老,但是简单的设计和实现未必就是过时的,它本身的开销,不管是GC相关数据结构的开销,还是线程的开销,都是非常小的,所以随着云计算的兴起,在serverless等新的应用场景下,Serial Gc找到了新的舞台
  • 比较不幸的是CMSGC,因为其算法的理论缺陷等原因,虽然现在还有非常大的用户群体,但在JDK9中已经被标记为废弃,并在JDK14版本中移除
  • 现在G1回收器已成为默认回收器好几年了。我们还看到了引入了两个新的收集器:ZGC(JDK11出现)和Shenandoah(Open JDK12),其特点:主打低停顿时间

Epsilon GC

Epsilon GC在官方被标为No-Op(无操作)的GC。在JDK11引入。
其原因是因为Epsilon GC只做内存的分配,不做垃圾的回收,适合于一些运行完后直接退出程序的情况。
官方文档:Epsilon: A No-Op Garbage Collector (Experimental)

Shenandonah GC

Shenandoah是第一款不由Oracle公司团队领导开发的Hotspot垃圾收集器,不可避免的受到官方的排挤。比如号称openJDK和OracleJDK没有区别的Oracle公司仍拒绝在OracleJDK12中支持Shenandoah。

Shenandoah垃圾回收器最初由RedHat进行的一项垃圾收集器研究项目Pauseless GC的实现,旨在针对JVM上的内存回收实现低停顿的需求。在2014年贡献给OpenJDK。

Red Hat研发Shenandoah团队对外宣称,Shenandoah垃圾回收器的暂停时间与堆大小无关,这意味着无论将堆设置为200MB还是200GB,99.9%的目标都可以把垃圾收集的停顿时间限制在十毫秒以内。不过实际使用性能将取决于实际工作堆的大小和工作负载。

实际测试结果如下:

在这里插入图片描述从结果看:

  • 停顿时间比其他几款收集器确实有了质的飞跃,但也未实现最大停顿时间控制在十毫秒以内的目标。
  • 而吞吐量方面出现了明显的下降,总运行时间是所有测试收集器里最长的。

总结:

  • Shenandoah GC的弱项:高运行负担下的吞吐量下降。
  • Shenandoah GC的强项:低延迟时间。

ZGC

官方文档:ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
官方文档:HotSpot Virtual Machine Garbage Collection Tuning Guide
ZGC与Shenandoah目标高度相似,在尽可能对吞吐量影响不大的前提下,实现在任意堆内存大小下都可以把垃圾收集的停颇时间限制在10毫秒以内的低延迟。

《深入理解Java虚拟机》一书中这样定义ZGC:ZGC收集器是一款基于Region内存布局的,(暂时)不设分代的,使用了读屏障染色指针内存多重映射等技术来实现可并发的标记-压缩算法的,以低延迟为首要目标的一款垃圾收集器。

ZGC的工作过程可以分为4个阶段:并发标记 - 并发预备重分配 - 并发重分配 - 并发重映射 等。

ZGC几乎在所有地方并发执行的,除了初始标记的是STW的。所以停顿时间几乎就耗费在初始标记上,这部分的实际时间是非常少的。

下面是官方发布的测试数据:

吞吐量
在这里插入图片描述

  • max-JOPS:以低延迟为首要前提下的数据

  • critical-JOPS:不考虑低延迟下的数据

低延迟
在这里插入图片描述
在ZGC的强项停顿时间测试上,它毫不留情的将Parallel、G1拉开了两个数量级的差距。无论平均停顿、95%停顿、99%停顿、99. 9%停顿,还是最大停顿时间,ZGC都能毫不费劲控制在10毫秒以内。

如何使用

可以参考和学习以下书籍:《新一代垃圾回收器 ZGC设计与实现》机械工业出版社

  • JDK14之前,ZGC仅Linux才支持。
    尽管许多使用ZGC的用户都使用类Linux的环境,但在Windows和macOS上,人们也需要ZGC进行开发部署和测试。许多桌面应用也可以从ZGC中受益。因此,ZGC特性被移植到了Windows和macOS上。

  • 现在mac或Windows上也能使用ZGC了,示例如下:
    -XX:+UnlockExperimentalVMOptions-XX:+UseZGC

其它垃圾回收器

AliGC

AliGC是阿里巴巴JVM团队基于G1算法,面向大堆(LargeHeap)应用场景。AliGC被应用于阿里巴巴自己研发的JVM(TaoBaoVM)中。
指定场景下的对比:
在这里插入图片描述

Zing

Zing目前主打的亮点是低延迟

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值