Java出现一个新的GC:​​​​​​​LXR


LXR是一种基于引用计数的新 Java 垃圾收集器,一种新的低延迟、高吞吐量的垃圾回收器。

该文在OpenJDK 11(当时的LTS)中构建了LXR,与现有G1、Shenandoah和ZGC等回收器进行了比较评估,LXR 在吞吐量和应用程序延迟方面都可以胜过这些回收器。

LXR采取了与现有生产型回收器非常不同的方法,使用先进的引用计数进行及时回收,谨慎地避免了并发复制的开销。
LXR是以应用的延迟为目标,而不是以降低“暂停”为目标,专注于效率。复制回明智地执行的,并且仅在短暂的 STW 暂停期间执行,避免了并发复制的开销。

点击标题,文章摘录:
自2004年以来,G1是一种基于区域的设计与并发追踪和严格疏散设计,这种设计一直主导着生产型垃圾回收器。
本文确认了这些先前的设计局限性,因为仅疏散的并发回收成本很高,而且由于完全的堆追踪,它们的回收也有延迟。
虽然它们提供了很短的暂停时间,但对于请求驱动的时间关键型工作负载来说,短暂停并不总是转化为低延迟

我们引入了LXR,它采取了一种完全不同的方法。它使用短暂的停顿和引用计数,在不复制的情况下及时回收大部分内存。
它通过有限的机会性复制对堆进行碎片整理。
它同时回收成熟的对象,识别循环中的死对象和引用计数卡住的死对象。
其结果是一个具有适度暂停时间的收集器,提供低应用延迟和高吞吐量。
我们的结果对堆的大小和微体系结构是稳健的。
这些初步结果表明,这种新的设计提供了性能而不需要额外的硬件或内存。我们希望这项工作能引起人们对现代收集器设计的重新思考,并为GC研究注入新的活力。