JDK 11 將引入低延遲 GC,大幅度縮短 GC 暫停時長

類別: IT
JDK

之前我們報導過 JDK 11 進入特性凍結階段,今天來看看 JEP 333為了大幅減少 GC 暫停時間的可伸縮低延遲垃圾回收器 ZGC(Scalable Low-Latency Garbage Collector )。


GC 一直以來是 Java 的主要優勢之一,但是,當垃圾回收暫停時間過長時,會對應用程式的響應時間產生負面影響,而現代系統中可用的記憶體量不斷增長,使用者和應用開發人員希望 JVM 能夠以高效的方式充分利用此記憶體,並且不要有過長的 GC 暫停時間。此次將新增的 ZGC 功能,能夠消除或大幅縮短 GC 暫停的時間。

ZGC 有以下幾個目標:

  • GC 暫停時間不應超過 10 ms

  • 處理堆的大小範圍從相對較小(幾百 M)到非常大(幾 T)不等

  • 與使用 G1 相比,應用程式吞吐量減少不超過 15%

  • 為未來的 GC 功能和優化利用有色指標(colored pointers)和載入屏障(load barriers)奠定基礎

  • 初始支援平臺:Linux/x64

ZGC 是一個併發的、單代的、基於區域的、NUMA 感知的壓縮收集器,Stop-the-world 階段僅限於根掃描,因此 GC 暫停時間不會隨堆或活動集(live set)的變大而增加。

ZGC 的核心設計原則/選擇是將載入屏障與有色物件指標(colored oops)結合使用,這使得 ZGC 能夠在 Java 應用程式執行緒執行時執行併發操作,例如物件重定向。從 Java 執行緒的角度來看,在 Java 物件中載入引用欄位的行為受到載入屏障的影響。除了物件地址之外,colored oops 還包含載入屏障使用的資訊,以確定在允許 Java 執行緒使用指標之前是否需要採取某些操作。例如,物件有可能已經被重定向,那麼載入屏障將對此進行檢測並採取適當的操作。

JEP 333 還展示了 ZGC 的效能等詳細資訊,訪問 http://openjdk.java.net/jeps/333 檢視。

JDK 11 將引入低延遲 GC,大幅度縮短 GC 暫停時長原文請看這裡