SunのGarbage Firstガベージコレクタ (G1というニックネームを持つ) は Java Update 1.6.0_14(6u14)と合わせてリリースされた。この短い一時停止、サーバスタイルのコレクタは、長い間コミュニティによって待ち望まれていたものだけれども、現時点で Sun は有償の顧客にしか本番環境での利用を許可していない。
G1は、以前に InfoQで特集されいる。
SunのGarbage Firstガベージコレクタ (以後、そのニックネームからG1と呼ぶ) は、レイテンシが小さな新しいガベージコレクタで、HotSpot JVMにおいてCMSの後継となるよう計画されたものです。これはサーバスタイルのコレクタで、大量メモリを備えたマルチプロセッサのコンピュータをターゲットとしています。CMSとG1には、2つの大きな違いがあります。1つ目は、G1は圧縮型のガベージコレクタであるということです。圧縮とは、ライブオブジェクトをヒープの一端に向けてメモリの自由領域の上に動かし、残りを1つの連続したメモリの自由領域となるようにするプロセスです。ヒープは時間が経つと断片的になるため、長時間実行されるアプリケーションにおいて重要です。G1は、割り当てに細かいフリーリストの使用を完全に避けるために十分な程度の圧縮を行いますが、これはコレクタの部品を大幅に単純化し、大部分の潜在的なフラグメンテーション問題を取り除いています。(2つ目は)圧縮と同じように、G1のガベージコレクションの停止時間は、CMSコレクタで得られるものに比べてより予測可能なものであり、それによってユーザは希望する停止時間の目標を設定することができるということです。この強力な決定論により、G1は真のリアルタイムコレクタとしての性質をいくつか備えていますが、OSスケジューリングのような要因によりまだ停止時間を保証できないため、真の確固たるリアルタイムコレクタではありません。しかし開発者にとってはJavaのリアルタイム製品よりも極めて使いやすくなっています。なぜなら、既存のコードについてコードレベルでの変更の必要なく、改良された性能を活用することができるからです。G1はグローバルなマーク情報やその他のメトリクスをベースとして数多くの興味深い技術を用い、ガベージコレクタの効率性に合わせて回収する領域の優先順位を決定しています。
G1は 6u14の更新で利用可能となった。
Garbage First、あるいはG1は、短い一時停止、サーバスタイルのコレクタです。G1のConcurrent Mark-Sweep(CMS)コレクタに対する一番の優位な点は、インクリメンタル圧縮、より良い予測可能性、そして使い勝手の良さです。
…しかしリリースノートで説明されているように、本番環境でG1を使うためには、Sunのサポートコンタクトが必要である。
G1はこのリリースで利用可能ですが、Javaサポート契約を購入したところでのみ、本番環境でのG1の使用が許可されることに注意しないといけません。G1は Sunの Java Platform Standard Edition for Business programを通じてサポートされています。
このことは、Oracleからの買収と結びついた Sunのポリシーの変化の表れであると考える人は多い。
Javaの貨幣化が始まったのです。Sunは、クールで新しいG1と呼ばれるガベージコレクタを含むJava 1.6.0_14 JDKとJREを今日リリースしました。 一つだけ興味を引くものがあります。G1は配布に含まれているのにもかかわらず、リリースノートにはこう記載されていることです。 "G1はこのリリースで利用可能ですが、Javaサポート契約を購入したところでのみ、本番環境でのG1の使用が許可されることに注意しないといけません。" つまりOracleの関わりはすでに影響を生じています。すべての優秀なスタッフが新しいJava SE for Business 製品バージョンに投入されて、OpenJDKは骨抜きにされた特性に停滞してしまう運命にあるのでしょうか?
一方、リリースノートのこの節は、G1の実験的な特徴に関係しているだけで、将来のバージョンでこの記述は削除されるだろうと考えている人もいる。
最初にリリースノートを読んだとき、私の最初の見解は、書いてある(説明された)記述どおりでした。"とりあえず出荷しましたが、このコードは本番環境に使えません。デフォルトではこの機能は有効ではありませんし、アプリケーションは予想外の振る舞いをするかもしれません。今、本番環境でこれを有効にするつもりでしたら、課題があります。もしサポート契約を結んでいないのでしたら、我々は助けることができないでしょう。"
u14以降あるいはJDK7がリリースされた時、このサポート要件はおそらく無くなるだろうと私は疑っています。
G1はJDK/OpenJDK 7の公表された機能の一つであり、Sunにとってそれを有償の顧客だけのままにしておくことは、この時点ではまったくありそうに無いことのように見える。
Sunが次世代のJava/JVMの機能のいくつかを貨幣化するとしたら、あなたはどう思うか? それはプラットフォームにどんな影響を与えるだろうか?