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チームはそれを採用したユーザからフィードバック(リンク)やバグ・レポート(リンク)が寄せられることを強く希望している。