http://openjdk.java.net/jeps/214をテキトーに訳した。
JEP 173: Retire Some Rarely-Used GC Combinationsをテキトーに訳した - kagamihogeの日記の続き的な。8で非推奨にしたので9では削除するよ~といった感じ。
JEP 214: Remove GC Combinations Deprecated in JDK 8
Owner Bengt Rutisson Created 2014/05/27 14:22 Updated 2014/10/17 08:17 Type Feature Status Proposed to Target Component hotspot / gc Scope JDK Discussion hotspot dash gc dash dev at openjdk dot java dot net Effort S Duration S Priority 2 Reviewed by Jon Masamitsu, Mikael Vidstedt Endorsed by Mikael Vidstedt Release 9 Issue 8044022
Summary
JEP 173を基にJDK 8で既に非推奨となったGCの組み合わせを削除します。
Non-Goals
このJEPでは、削除されたGCの組み合わせの代わりとなる実装の提供は行いません。削除されないほとんどのコレクターは削除されたGCの組み合わせと同等もしくれはそれ以上の性能です。削除されるGCと同等の機能を持つようにGCを機能拡張することも行いません。パフォーマンス要求を満たすためのGCのチューニングだけは考慮されます。
Success Metrics
- 該当JVMオプションに対して非推奨メッセージが出力されないこと。JVMはメッセージの代わりに未知のフラグと見なす。
- ParNew + SerialOldからParallelScavenge + SerialOld変更時のパフォーマンス変化が妥当なベンチマークによって受け入れられること*1。
Motivation
JEP 173にあるように、既存のすべてのGCの組み合わせをメンテナンスし続けるのに多大なコストが発生しています。非推奨となったGCの組み合わせを削除することはHotSpot GCのコードを単純化でき、それによって多数のバグを削減し、他のGCの組み合わせの開発の高速化が可能になります。
Description
JEP 173で非推奨にされたGCの組み合わせのフラグと同様に、CMS foreground collectorのフラグ(JDK-8027876の一環として非推奨にされた)が、コードベースから削除される予定です。つまり、警告メッセージが表示されることすらなくなり、JVMはもしフラグが使用された場合には起動しません*2。
フラグが一度削除されると、現状では無効となっているコードはGCコードベースから削除される予定です。この作業は広範囲に渡るのでコードベースの単純化が可能になります。こうした単純化は個別の変更に応じて分割が可能です。
以下は動作停止予定のフラグとフラグの組み合わせの詳細な要約です。
DefNew + CMS : -XX:-UseParNewGC -XX:+UseConcMarkSweepGC ParNew + SerialOld : -XX:+UseParNewGC ParNew + iCMS : -Xincgc ParNew + iCMS : -XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC DefNew + iCMS : -XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC -XX:-UseParNewGC CMS foreground : -XX:+UseCMSCompactAtFullCollection CMS foreground : -XX:+CMSFullGCsBeforeCompaction CMS foreground : -XX:+UseCMSCollectionPassing
このJEPでのParNew + SerialOldに対する作業には、ParNew + SerialOldとParallelScavenge + SerialOldとのパフォーマンス比較テストも含まれます。その結果はParNew + SerialOldからParallelScavenge + SerialOldへ変更するための改善提案の根拠となる予定です。
Alternatives
コードの非推奨オプションのすべてもしくは一部を残したままにする。そうした場合、GCコードの貴重なクリーンナップ機会を逃し、コードベースの新規開発を遅らせることになると思われます。
Testing
現在のテストは対象オプションが警告メッセージを出力することを検証します。このテストを、対象のオプションは未知であるとのメッセージを期待値とするように、修正する必要があります。
Risks and Assumptions
削除される予定のフラグのいずれかを使用しているユーザはJVM起動のコマンドラインを変更する必要があります。JDK 8からJDK 9へ移行しようとしているユーザの場合、警告メッセージが既に表示されているので、変更は突然のものではありません。想定では、ほとんどのユーザは削除されるフラグからモダンなGCにチューニングすることで利益を得られる筈です。
Dependences
本JEPの作業はJEP 173: Retire Some Rarely-Used GC Combinationsに依存しています。リンク先のJEPはJDK 8で実装済みであり、よって、現時点で未実装の依存関係はありません。