kagamihogeの日記

kagamihogeの日記です。

JEP 173: Retire Some Rarely-Used GC Combinationsをテキトーに訳した

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

JEP 173: Retire Some Rarely-Used GC Combinations

Owner Bengt Rutisson
Created 2012/11/26 20:00
Updated 2014/07/10 20:22
Type    Feature
Status  Completed
Component   hotspot / gc
Scope   JDK
Discussion  hotspot dash gc dash dev at openjdk dot java dot net
Effort  XS
Duration    XS
Priority    4
Reviewed by Jesper Wilhelmsson, John Coomes, Jon Masamitsu
Endorsed by Mikael Vidstedt
Release 8
Issue   8046163

Summary

あまり使用されない三つのGCの組み合わせを、現行の開発・メンテナンス・テストのコストを下げるために削除します。

Goals

現在では、将来のサポートを確保するほど十分には使用されない、三つのGCの組み合わせが存在します。

  • DefNew + CMS
  • ParNew + SerialOld
  • Incremental CMS

これらの組み合わせはGCのコードベースに特別の複雑さをもたらしており、ユーザに価値を提供するのに貴重なテストリソースを消費しています。GCコードベースを単純化してテストと持続可能性(sustainability)を改善するために、我々は三つの組み合わせの削除を提案します。

Motivation

すべての既存のGCの組み合わせを維持し続けることには多大なコストが必要です。それらすべてをテストするリソースは十分に存在しません。GCコードベースの複雑さのために、新機能は実装とテストに長い時間を要します。シンプルさと安定性、それと高速なコードベースへ向かう第一歩として、我々はあまり使用されない組み合わせの削除を要求します。

Description

DefNew + CMSのParNew + SerialOldの組み合わせおよびIncremental Mode of CMSは非推奨になります(警告メッセージが出力されます)。このGCの組み合わせは将来のメジャーリリースで削除される、と解釈されます。

コマンドラインにおけるフラグの以下の組み合わせが影響を受けます。

GC設定フラグ -XX:-UseParNewGC -XX:+UseConcMarkSweepGC DefNew + CMS -XX:+UseParNewGC ParNew + SerialOld -Xincgc ParNew + iCMS -XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC ParNew + iCMS -XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC -XX:-UseParNewGC DefNew + iCMS

Alternatives

未テストのGCの組み合わせサポートの続行。

Testing

  • 対象となるコマンドラインフラグが警告メッセージおよび必要に応じてエラーメッセージを生成することの検証テスト。
  • 他のすべてのGCの組み合わせが継続的なテストの対象となっていることの確認。

Risks and Assumptions

GCの組み合わせに関する三つの基本的な仮定が問題点として挙げられます。

  • 現在Incremental CMSを使用している多くのユーザは"normal" CMSに切り替えることで利益を得られる。
  • DefNew + CMSを使用しているユーザは代わりにParNew + CMSを使用することで利益を得られる。
  • ParNew + SerialOldを使用しているユーザは代わりにParallelScavenge + SerialOldを使用することで利益を得られる。

リスクとは、これらの仮定の一つ以上が説得力を持たない場合です。我々がいま言える範囲においてはリスクは小さいです。

Impact

  • 互換性: 我々はコマンドラインオプションを非推奨にします。
  • User experience: ユーザによっては現在選択しているGCを変更しなければならない可能性があります。うまくいけばその変更はより良い状態をもたらします。
  • 文書化: コマンドラインオプションが変更されるため、関連ドキュメントは更新される必要があります。また、リリースノートも必要です。