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