ZGC將在下一個JDK版本中生產可用

2020-04-04     鋒哥愛學習

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命令行選項。這將不再需要,這些測試將相應地進行調整。

文章來源: https://twgreatdaily.com/zh-mo/S0f1mHEBfwtFQPkduBuP.html