注意: Java SE 8以降の場合は、Java HotSpot Virtual Machineガベージ・コレクション・チューニング・ガイドを参照してください。
Java SE 5.0では、次の変更が実施されています。
サーバーVMを実行しているserver-classマシンのガベージ・コレクタ(GC)が、従来のシリアル・コレクタ(-XX:+UseSerialGC
)からパラレル・コレクタ(-XX:+UseParallelGC
)に変更されました。このデフォルトは、java
コマンドの-XX:+UseSerialGC
コマンド行オプションを使用することでオーバーライドできます。
パラレル・ガベージ・コレクタ(-XX:+UseParallelGC
)を使用していずれかのVM (クライアントまたはサーバー)を実行するserver-classマシンで、初期ヒープ・サイズと最大ヒープ・サイズが以下のように変更されました。
マシンの物理メモリーの1/64または妥当な最小の大きい方。Java SE 5.0より前は、デフォルト初期ヒープ・サイズは妥当な最小で、プラットフォームごとに異なっていた。このデフォルトは、-Xms
コマンド行オプションを使用してオーバーライドが可能。
物理メモリーの1/4または1Gバイトの小さい方。Java SE 5.0より前のデフォルトの最大ヒープ・サイズは64MB。このデフォルトは、-Xmx
コマンド行オプションを使用してオーバーライドが可能。
注: ヒープ・サイズに指定された限度と分数は、Java SE 5.0に対して適切です。これは、コンピュータがより高性能になるにつれ、今後のリリースで変更される可能性があります。
パラレル・ガベージ・コレクタ(UseParallelGC
)は、少量のヒープを収集するために過剰な時間が消費されている場合、メモリー不足例外をスローします。ヒープ・サイズを大きくすると、この例外を回避できます。パラメータ-XX:GCTimeLimit=
time-limitおよび-XX:GCHeapFreeLimit=
space-limitを設定することもできます。
ガベージ・コレクションに消費される時間の上限(合計時間に対するパーセント、デフォルトは98)。
ガベージ・コレクション中に解放される領域の下限(最大ヒープに対するパーセント、デフォルトは2)。
-XX:+UseParallelGC
ガベージ・コレクタでデフォルトで使用される-XX:+UseAdaptiveSizePolicy
の実装が、以下の3つの目標を考慮して変更されました。
実装では以下のことを(この順序で)チェックします。
-XX:MaxGCPauseMillis=
nnnデフォルトでは、一時停止時間目標はありません。一時停止時間目標がどの程度満たせるかについては明確な制限があります。GCの一時停止時間は、ヒープ内のライブ・データの量に依存します。収集の大小は、さまざまな面でライブ・データの量に依存します。このパラメータは注意して扱うようにしてください。値が小さすぎると、システムがガベージ・コレクションに過剰な時間が消費されます。
-XX:GCTimeRatio=
nnnたとえば、-XX:GCTimeRatio=19
は、GCの合計時間の5%という目標と95%のスループット目標を設定します。つまり、アプリケーションはコレクタの19倍の時間を取得するはずです。
デフォルト値は99で、アプリケーションがコレクタの少なくとも99倍の時間を取得するはずという意味です。つまり、コレクタは合計時間の1%以下の時間実行されるはずです。これは、サーバー・アプリケーションにとって良い選択肢として選択されました。値が高すぎると、ヒープ・サイズがその最大値にまで大きくなります。
ヒープがデフォルト最大ヒープ・サイズよりも大きいことがわかっている場合を除いて、ヒープの最大値を選択しないでください。アプリケーションにとって十分なスループット目標を選択してください。
理想的な状況では、ヒープは選択されたスループット目標をサポートする値(最大値未満)まで大きくなります。
ヒープが最大値まで大きくなると、スループットはその最大値内で満たせません。最大ヒープはできるだけ大きく、しかしプラットフォームの物理メモリーのサイズより大きくならないように設定してから、もう一度アプリケーションを実行してください。それでもスループット目標が満たせない場合は、それはプラットフォームで使用可能なメモリーに対して高すぎます。
スループットは満たせるけれども、一時停止が長すぎる場合は、一時停止時間目標を選択します。これは、スループット目標が満たされないことを意味する可能性が高いので、アプリケーションにとって受け入れ可能な妥協値である値を選択してください。