オラクルはZガベージコレクタ(ZGC)をオープンソースにする意向があると発表した。Per Liden氏、オラクルのZGCの考案者でHotspotプロジェクト(かつてはJRockit)のメンバであるが、氏はZGCをオープンソースにするため新しいプロジェクトをOpenJDKコミュニティに提案した。
ZGCはオラクル内部で開発されていた。目的は巨大なヒープのための低レイテンシのガベージコレクションを提供することである。ZGCの主な設計目標は以下のことである。
- 数千テラバイトのヒープを扱う。
- GCポーズタイムが10ミリ秒を超えないよう制限する。
- アプリケーションのスループット減少はG1と比較して15%を超えないはずだ。
Liden氏によると、オラクルでの彼のチームはこれまで業界の有名なベンチマークのいくつかでこれらの目標を達成するか、または超えてきた。 彼らは関連がある一連のワークロードの多くでこれらの目標を達成したいという大きな野望がある。しかしこれらの目標はすべてのシナリオで厳しく求められるものではない。
ZGCはコンカレントで1世代のガベージコレクタである。ストップ・ザ・ワールドのフェーズはルートスキャンに制限されている。これが意味することは、GCポーズタイムがヒープサイズに伴って増加しないということである。
Liden氏はZGCの設計と実装はすでにかなり安定し成熟していると断言している。ZGCは現在並列に次のGCタスクを実行する。
- マーキング
- 参照の処理
- 再配置セットの選択
- 再配置/コンパクション
Liden氏によると、ZGCの核となる設計原則は色付きのオブジェクトポインタとともにロードバリアを使うことである。これでJavaアプリケーションスレッドがまだ実行中でもZGCがオブジェクトの再配置といった並列操作を実行できるようになる。色付きのオブジェクトポインタはまた、Javaスレッドにそのポインタを使用する許可を与える前にあるアクションを受け入れる必要があるかどうかを決定するためにロードバリアが使用する情報を含んでいる。
Liden氏は色付きポインタというアプローチは次のような注目に値する特性を提供すると説明している。
- 再要求/再利用リージョンを指すポインタが固定される前に、再配置/終了フェーズの間にメモリを再要求し再利用できる。このアプローチはヒープ全体のオーバヘッドを低く保つのに役立つ。またフルGCを処理するための別のマークコンパクトアルゴリズムの実装が不要となる。
- 比較的少なくシンプルなGCバリア。これはランタイムのオーバヘッドを低く保つのに役立つ。またインタプリタとGITコンパイラにあるGCバリアコードの実装と最適化、そしてメンテナンスを簡単にしてくれる。
- 色付きポインタは現在関連する情報のマーキングと再配置の保存に使用されている。しかし色付きポインタのスキームにある万能な性質によりあらゆる型の情報が保存でき、ロードバリアがその情報に基づいて、取りたいと判断したアクションを取れるようにする。このアプローチは今後の機能にとって役に立つだろう。
OpenJDKフォーラムでの提案によると、残りの作業の大部分がHotSpotにあるガベージコレクションではないサブシステムにあるレイテンシの問題への取り組みを含んでいる。たとえばStringTableにある無効なエントリを並列的にunlinkできるといったことである。
Liden氏は初めのうちはレビュープロセスをゆるいものに変えておき、プロジェクトが統合に近づくころにより厳密にしたいとしている。もしプロジェクトがOpenJDKコミュニティによって承認されれば、Liden氏はプロジェクトリードとなりオラクルのHotSpotグループがスポンサーグループとなるだろう。
投票は2017年11月8日を予定しており、プロジェクトは採用されるだろう。しかし公式発表はまだなされていない。
Rate this Article
- Editor Review
- Chief Editor Action