为什么没有更多的无间断GC

Pep*_*ijn 16 java garbage-collection

除了Azul之外,我所知道的所有GC都有点并发,但至少有一些小的世界组件.为什么没有更像GC的像Azul?

Azul是否已将其技术申请专利,以至于无法做到这一点?

或者,无休止操作所需的读/写障碍会产生如此大的开销,以至于它们对大多数工作负载来说都是不切实际的?

chr*_*ke- 10

基于C4的Azul白皮书,看起来C4是一种非常新的技术,是2005年发布的算法的实现,首先是在自定义硬件上,然后专门移植到x86上的Linux,而JVM实现非常接近内核VM系统.

由于OpenJDK/HotSpot广泛应用于多种平台和主要生产工作负载,因此在采用算法的重大创新时往往移动得更慢(切换到TimSort就是一个很好的例子).Java 8版本多年来引入了GC系统的第一次重大改进(消除了PermGen),并且C4等改进,如果实际可以移植到跨平台或抽象而没有明显的JVM簿记内部缺陷,很可能试用,然后在即将推出的版本中采用OpenJDK/HotSpot.


Jos*_*man 8

实现垃圾收集器非常棘手,并且没有多少应用程序能够真正证明无暂停收集器的合理性.正如您所提到的,读/写障碍会带来相当高的开销,如果您绝对需要低延迟并且愿意接受吞吐量,那么您只需要支付.

也就是说,在这个JEP中正在实施一个名为Shenandoah的低停顿GC:http://openjdk.java.net/jeps/189.作为一名Java程序员,我希望它能在几年后推出.


Zhe*_*lov 4

中关村

从 Java 11 开始,有一个新的Z 垃圾收集器(ZGC) 可用于 Linux/x64 JDK(自 Java 14 起的 Windows/macOS):

Z 垃圾收集器,也称为 ZGC,是一种可扩展的低延迟垃圾收集器,旨在满足以下目标:

  • 暂停时间不超过10ms
  • 暂停时间不会随着堆或实时设置大小的增加而增加
  • 处理大小从几百兆字节到数 TB 的堆

您可以通过指定以下 JVM 参数来启用 ZGC:

-XX:+UnlockExperimentalVMOptions -XX:+UseZGC
Run Code Online (Sandbox Code Playgroud)

(对于 Java 15+,-XX:+UnlockExperimentalVMOptions没有必要


谢南多厄GC

此外,从 Java 12 开始,Shenandoah GC可用于所有平台。ShenandoahGC 与 ZGC 具有相似的特性,但其实现方式不同。

-XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC
Run Code Online (Sandbox Code Playgroud)

(对于 Java 15+,-XX:+UnlockExperimentalVMOptions没有必要

Shenandoah GC 还向后移植到 Java 11 (11.0.9) 和 Java 8(只有 JDK 8 的 RedHat 版本包括 Shenandoah)。