kagamihogeの日記

kagamihogeの日記です。

JEP 307: Parallel Full GC for G1をテキトーに訳した

http://openjdk.java.net/jeps/307 をテキトーに訳した。

JEP 307: Parallel Full GC for G1

Owner    Stefan Johansson
Created 2017/01/17 11:40
Updated 2017/11/13 16:52
Type    Feature
Status  Targeted
Component   hotspot?/?gc
Scope   Implementation
Discussion  hotspot dash gc dash dev at openjdk dot java dot net
Effort  M
Duration    M
Priority    3
Reviewed by Mikael Vidstedt
Endorsed by Mikael Vidstedt
Release 10
Issue   8172890

Summary

G1のワーストケースのレイテンシ改善のため、パラレルのフルGCを導入します。

Non-Goals

すべてのユースケースにおけるパラレルGCのフルGCのパフォーマンス調整。

Motivation

G1 GCJDK 9のデフォルトになりました。以前のデフォルトのパラレルGCには、パラレルフルGCがあります。ユーザが直面するフルGCインパクトを最小化するため、G1フルGCもパラレルに出来るのが望ましいです。

Description

G1 GCはフルGCを避けるように設計されていますが、コンカレントコレクションが速やかにメモリを回収出来ない場合はフルGCにフォールバックします。G1 GCの現在の実装はシングルスレッドのmark-sweep-compactアルゴリズムです。我々はmark-sweep-compactアルゴリズムをパラレル化し、また、YoungとMixedのコレクションに同じ数のスレッドを使うようにしよう、と考えています。スレッド数は-XX:ParallelGCThreadsオプションで制御可能にしますが、YoungとMixedコレクションに使われるスレッド数にも影響します。

Testing

  • フルGC時間の改善を確認するためにその時間を分析します。G1はフルGCを避けるよう設計されているので、ベンチマークスコアの確認ではおそらく不十分です。
  • ボトルネックを見つけ出すのにVTuneもしくはSolaris Studio Performance Analyzerを使用したランタイム分析をします。

Risks and Assumptions

  • G1の基本設計がパラレルフルGCを阻害しないという仮定の上にこのJEPは立っています。
  • G1にはリージョンがあるので、単一スレッドのフルGCよりもパラレルフルGC後の方が余計にメモリを浪費する可能性がかなり高いです。