ZGC是一個無延時的GC算法,為JDK帶來了近乎實時的GC回收能力,但是一直是處於實驗性的狀態。根據最新的JEP 提案 377, ZGC算法,將進入生產可用狀態
JEP 377: ZGC:可擴展的低延遲垃圾回收器(生產)
所有者 佩爾·利登
類型: 特徵
範圍: 實現
地位: 目標
版本:15
組件:hotspot/ gc
討論:hotspot dash gc dash dev at openjdk dot java dot net
相關: JEP 351: ZGC:未提交未使用的內存(實驗)
JEP 333: ZGC:可擴展的低延遲垃圾回收器(實驗)
JEP 364: macOS 上的 ZGC(實驗)
JEP 365: Windows 上的 ZGC(實驗)
評審者 埃里克·奧斯特倫德,米凱爾·維德斯泰特,斯特凡·卡爾松
通過 米凱爾·維茨泰特
創建 2018/08/20 06:16
更新 2020/04/03 22:53
問題 8209683
總結
將 Z 垃圾回收器從實驗功能更改為產品功能。
非目標
此 JEP 不建議更改默認 GC,該 GC 仍為 G1。
動機
ZGC 被JEP 333集成到 JDK 11 中。如此大、複雜性的新功能最好仔細、漸進地引入,因此,我們將其作為實驗功能。這有助於設定用戶期望,並允許用戶提供反饋,而無需下載或構建單獨的 JDK 二進位文件,如果 ZGC 開發繼續超出 JDK,情況就是如此。
自 JDK 11 引入以來,我們收到了積極的反饋,我們解決了許多錯誤,並增加了許多功能和增強功能。要強調一些更重要的:
並發類卸載
取消提交未使用的內存(JEP 351))
最大堆大小從 4TB 增加到 16TB
最小堆大小減少到 8MB
-XX:SoftMaxHeapSize
支持 JFR 泄漏探查器
支持類數據共享
有限的、不連續的地址空間
支持將堆放在 NVRAM 上
提高 NUMA 意識
多線程堆預接觸
此外,現在支持所有常用平台:
Linux/x86_64 (JEP 333))
Linux/無政府狀態64 (8214527)
windows (JEP 365)
macOS (JEP 364)
對 ZGC 的測試表明它是穩定的,並且,截至本文編寫,我們幾個月來沒有收到任何特定於 ZGC 的新 Bug。憑藉 ZGC 目前的穩定性、功能集和平台支持,是時候刪除其實驗狀態並將其作為產品功能了。
描述
ZGC 今天通過-XX:+UnlockExperimentalVMOptions -XX:+UseZGC命令行選項啟用。使 ZGC 成為產品(非實驗性)功能意味著不再需要-XX:+UnlockExperimentalVMOptions。
將ZGC轉變為一個產品(非實驗性)功能主要是將UseZGC命令行選項類型從experimental改為product的問題。此外,我們還將將以下 ZGC 特定的選項(當前標記為experimental)更改為product。我們不會更改這些選項的默認值。
ZAllocationSpikeTolerance
ZCollectionInterval
ZFragmentationLimit
ZMarkStackSpaceLimit
ZProactive
ZUncommit
ZUncommitDelay
以下 ZGC 特定的 JFR 事件(當前標記為experimental)也將更改為product.
ZAllocationStall
ZPageAllocation
ZPageCacheFlush
ZRelocationSet
ZRelocationSetGroup
ZUncommit
測試
ZGC 的測試作為JEP 333的一部分添加,自那時以來又增加了其他測試。作為 JEP 的一部分,不會開發任何額外的測試。
啟用 ZGC 時,某些測試當前提供-XX:+UnlockExperimentalVMOptions命令行選項。這將不再需要,這些測試將相應地進行調整。