Java出現一個新的GC:​​​​​​​LXR

banq發表於2022-04-26

LXR是一種基於引用計數的新 Java 垃圾收集器,一種新的低延遲、高吞吐量的垃圾回收器。

該文在OpenJDK 11(當時的LTS)中構建了LXR,與現有G1、Shenandoah和ZGC等回收器進行了比較評估,LXR 在吞吐量和應用程式延遲方面都可以勝過這些回收器。

LXR採取了與現有生產型回收器非常不同的方法,使用先進的引用計數進行及時回收,謹慎地避免了併發複製的開銷。
LXR是以應用的延遲為目標,而不是以降低“暫停”為目標,專注於效率。複製回明智地執行的,並且僅在短暫的 STW 暫停期間執行,避免了併發複製的開銷。

點選標題,文章摘錄:
自2004年以來,G1是一種基於區域的設計與併發追蹤和嚴格疏散設計,這種設計一直主導著生產型垃圾回收器。
本文確認了這些先前的設計侷限性,因為僅疏散的併發回收成本很高,而且由於完全的堆追蹤,它們的回收也有延遲。
雖然它們提供了很短的暫停時間,但對於請求驅動的時間關鍵型工作負載來說,短暫停並不總是轉化為低延遲

我們引入了LXR,它採取了一種完全不同的方法。它使用短暫的停頓和引用計數,在不復制的情況下及時回收大部分記憶體。
它通過有限的機會性複製對堆進行碎片整理。
它同時回收成熟的物件,識別迴圈中的死物件和引用計數卡住的死物件。
其結果是一個具有適度暫停時間的收集器,提供低應用延遲和高吞吐量。
我們的結果對堆的大小和微體系結構是穩健的。
這些初步結果表明,這種新的設計提供了效能而不需要額外的硬體或記憶體。我們希望這項工作能引起人們對現代收集器設計的重新思考,併為GC研究注入新的活力。


 

相關文章