《JDK10新特性官方文件》JEP307: G1 Full GC的並行化
阿新 • • 發佈:2018-12-23
作者: Stefan Johansson
建立時間:2017/01/17 11:40
更新時間:2018/03/29 07:39
型別: 特性
狀態: 已關閉/已提交
元件:hotspot/gc
範圍:實現類
討論: openjdk.java.net上的hotspot-gc-dev
影響:M
持續時間:M
優先順序:3
審閱人:Mikael Vidstedt
支持者:Mikael Vidstedt
版本:10
總結
通過將G1的Full GC操作並行化來改善G1的最壞情形下的延遲。
非目標
為所有用例使得並行化垃圾收集器的Full GC效能達到一致。
提案目的
G1垃圾收集器在JDK9版本中是預設使用的,以前預設的垃圾收集器已經有了並行化的Full GC功能,為了最大限度的減少使用者在各種垃圾收集器的Full GC方面體驗的差異,G1 在Full GC也應該做到並行化。
提案描述
G1 垃圾收集器是被設計用來避免JVM進行Full GC操作的,但是當併發收集器回收記憶體太慢時JVM就會進行一次Full GC。當前G1垃圾收集器在Full GC時使用的是單執行緒的標記-清除-整理演算法。我們打算並行化標記-清除-整理演算法,使用的執行緒數和在年輕代和混合(注: 原文為Mixed collections,不知道怎麼翻譯)收集使用的執行緒數量一致。執行緒數量可以通過 -XX:ParallelGCThreads 引數來配置,這個配置同時也會影響在年輕代和混合代垃圾收集時的執行緒數量。
測試
- Full GC時間測試確保和以前相比有所改善。因為G1旨在避免完整的GC,所以這裡考慮到基準分數可能不夠好。
- 用VTune或者Solaris Studio效能分析軟體進行執行時間分析,查詢沒必要的效能瓶頸。
風險和假設
- 這個工作是建立在假定G1設計原理上沒有任何東西會阻止Full GC的並行化實現上的。
- 因為G1使用了regions(分割槽),在進行並行Full GC操作後相比單執行緒的Full GC極大可能會造成空間的浪費。