1. 程式人生 > >《JDK10新特性官方文件》JEP307: G1 Full GC的並行化

《JDK10新特性官方文件》JEP307: G1 Full GC的並行化

作者: 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極大可能會造成空間的浪費。