BT

SunのGarbage-First Garbage Collectorが低レイテンシと高スループットのトレードオフを大幅に解消

| 作者: Charles Humble フォローする 796 人のフォロワー , 翻訳者 ガーナー 淳子 フォローする 0 人のフォロワー 投稿日 2009年4月30日. 推定読書時間: 4 分 |

原文(投稿日:2009/4/15)へのリンク

SunのGarbage-First garbage collector(以後、そのニックネームからG1と呼ぶ)はレイテンシが小さな、新しいガベージ・コレクタで、HotSpot JVMにおいてCMSの後継となるよう計画されたものである。これはサーバ・スタイルのコレクタで、大型メモリを備えたマルチ・プロセッサのコンピュータをターゲットとしている。CMSとG1には、2つの大きな違いがある。まず、G1は圧縮型のガベージ・コレクタであるという点である。圧縮とは、ライブ・オブジェクトをヒープの一端に向けてメモリの自由領域を避けて動かし、残りを1つの連続したメモリ自由領域となるようにするプロセスで、ヒープは時間が経つと断片的になるために長時間実行されるアプリケーションにおいて重要である。G1は割り当てに細かいフリー・リストを用いないために十分な程度の圧縮を行うのだが、これはコレクタのパーツを大幅に簡素化し潜在的なフラグメンテーション問題の大部分を取り除いている。圧縮に加え、G1のガベージ・コレクション・ポーズはCMSコレクタで得られるものに比べより予測可能なものであり、それによってユーザは希望するポーズ目標を設定することができる。この強力な決定論により、G1はリアルタイム・コレクタとしての性質をいくつか備えているが、OSスケジューリングといった要素により依然としてポーズを保証できないため、真の確固たるリアルタイムではない。しかしディベロッパにとってはJavaのリアルタイム製品よりも極めて使いやすくなっている。というのは、既存のコードについてコード・レベルでの変更の必要なく改良された性能を活用することができるからだ。G1はグローバルなマーク情報やその他のメトリクスをベースとして数多くの興味深い技術を用い、ガベージ・コレクタの効率性に照らし合わせコレクタのためのリージョンの優先順位を決定している。さらなる技術的な詳細は、以前のInfoQ記事(参考記事)において紹介している。

最近のポッドキャスト(リンク)においてJames Gosling氏は、金融取引に代表されるある種の大規模JavaアプリケーションでのG1の重要性を強調している。これは大量のライブ・ヒープ・データや相当数のスレッドレベルでの並列処理を特徴とし、ハイエンドでマルチコアなプロセッサで実行される場合が多い。

「…これらJavaアプリケーションの多くには、実はデータベースを使っていないという隠された秘密があります。データベースの代わりに大容量のRAMを使い、また常にディスクに触れているだけの余裕はないため猛烈な勢いでガベージ・コレクタを使用します。1秒あたりに何千というトランザクションを実行しているとき、要は全てをRAMにキープし、ハッシュ・テーブルを用い、可能な限り多くのコアをトランザクションに集中させているのです。そして通常そこには、トランザクションのレイテンシに関する大きな問題が伴っています。」

続けてGosling氏はスループットと決定論の間のトレードオフについて語っている。通常は、ガベージ・コレクタはこのうちのどちらか1つについて最適化されている。スループットについて最適化されたガベージ・コレクタは長時間実行するバッチ・ジョブといったタスクについて申し分なく適しており、全バッチを実行させできるだけ素早く完了させることに比べれば、ガベージ・コレクタのためのポーズは大した問題ではない。これに対し、ウェブ・アプリケーションといった双方向型のシステムに取り組んでいるならば、レイテンシが小さいガベージ・コレクタの選択が最も適している。Gosling氏はこのトレードオフはJVMにおいてあらゆる場面に存在し、一般的には、JVMはスループットに向けて最適化されていると主張している。実際のところ、

「これは、何かを再編成するアルゴリズムが存在するところならばどこでも起こります。ですからハッシュ・テーブルを採用すべきです。ハッシュ・テーブルでの挿入と削除時間は一定だと誰もが考えていますが、それは誤りです。再ハッシュが必要となるまでは挿入の時間は一定ですが、再ハッシュは長い時間が必要です。」

ガベージ・コレクタが任意のyミリ秒のうちxミリ秒を超える時間を消費しないという明確なターゲットの特定をできるようにすることで、G1は、コレクタのポーズをそのアプリケーションのためにできるだけ小さく、そして発生頻度を低くするよう試みることができる。しかし、スループットの削減やフットプリントを不必要に増大するまで小さくはしない。スループットとレイテンシの小ささのトレードオフが最も目に見える領域の1つがガベージ・コレクタであるということを考えれば、G1はJava Enterpriseのディベロッパに重要なメリットを提供すべきである。これはJava 6 update 14のEarly Access のリリース(リンク)にて利用が可能で、SunのHotSpotチームはそれを採用したユーザからフィードバック(リンク)やバグ・レポート(リンク)が寄せられることを強く希望している。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT