ZGC - オラクルの巨大ヒープ向けガベージコレクタ
- 共有
-
- |
後で読む
マイリーディングリスト
A note to our readers: As per your request we have developed a set of features that allow you to reduce the noise, while not losing sight of anything that is important. Get email and web notifications by choosing the topics you are interested in.
オラクルは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日を予定しており、プロジェクトは採用されるだろう。しかし公式発表はまだなされていない。
- Eclipse MicroProfileでJavaでのマイクロサービスの採用を加速させる 2017年11月16日
- EE4J、EclipseファウンデーションがオープンソースJava EEを準備 2017年11月16日
- IBMがJavaマイクロサービス用のオープンソースランタイムOpen Libertyを公開 2017年11月10日
- Java EEの将来、David BlevinsとのQ&A: EclipseファウンデーションとEE4J、MicroProfile 2017年11月9日
- JavaOneキーノート:IBMのOpenJ9とOpen Liberty; Javaコミュニティによるマトリックス 2017年11月7日
- EclipseがエンタープライズJava関係者に参加呼びかけ 2017年11月7日
- Brian GoetzがJavaのパターンマッチングについてInfoQに語った 2017年10月31日
- Spring Framework 5.0がリリース 2017年10月30日
- JUnit 5リリース 2017年10月27日
こんにちは
コメントするには InfoQアカウントの登録 または ログイン が必要です。InfoQ に登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。
あなたの意見をお聞かせください。