除了Azul之外,我所知道的所有GC都有点并发,但至少有一些小的世界组件。为什么没有更像GC的像Azul?
Azul是否已将其技术申请专利,以至于无法做到这一点?
或者,无休止操作所需的读/写障碍会产生如此大的开销,以至于它们对大多数工作负载都是不切实际的?
答案 0 :(得分:8)
基于the Azul whitepaper on C4,看起来C4是一种非常新的技术,是2005年发布的算法的实现,首先是在自定义硬件上,然后专门移植到x86上的Linux,并且JVM实现非常接近到内核VM系统。
由于OpenJDK / HotSpot广泛应用于多种平台和主要生产工作负载,因此在采用算法的重大创新时往往移动速度较慢(切换到TimSort就是一个很好的例子)。 Java 8版本多年来引入了GC系统的第一次重大改进(消除了PermGen),并且C4等改进,如果实际可以移植到跨平台或抽象而没有明显的JVM簿记内部缺点,很可能试用,然后在即将推出的版本中采用OpenJDK / HotSpot。
答案 1 :(得分:8)
实现垃圾收集器非常棘手,并且没有多少应用程序能够真正证明无暂停收集器的合理性。正如您所提到的,读/写障碍会带来相当高的开销,如果您绝对需要低延迟并且愿意对吞吐量产生影响,那么您只需要支付。
也就是说,在这个JEP中正在实施一个名为Shenandoah的低停顿GC:http://openjdk.java.net/jeps/189。作为一名Java程序员,我希望它能在几年后推出。
答案 2 :(得分:1)
从Java 11开始,有一个适用于Linux / x64 JDK的新Z Garbage Collector(ZGC):
Z垃圾收集器(也称为ZGC)是一种可扩展的低延迟垃圾收集器,旨在满足以下目标:
- 暂停时间不超过10ms
- 暂停时间不会随着堆或活动集大小的增加而增加
- 处理堆的大小从几百兆字节到几兆兆字节不等
您可以通过指定以下JVM参数来启用ZGC:
*.elb.amazonaws.com
答案 3 :(得分:1)
Zing的专利C4垃圾收集器最初是in 2005的描述,而OpenJDK一直等到2018年才添加the pauseless ZGC garbage collector。自首次申请以来,美国的专利权已有20年了,与此同时,Sun / Oracle在各种垃圾收集器上花费了大量精力。很明显,这是一个专利问题。
基于早期使用Zing和G1,并了解了Shenandoah和其他人的权衡,我怀疑一旦Oracle感到足够成熟,ZGC就会成为默认值。