7.1.3 ガーベージコレクションの発生とメモリ空間の関係

ガーベージコレクションは,メモリ空間の使用状況に応じて,次のタイミングで発生します。

<この項の構成>
(1) コピーガーベージコレクションが発生するタイミング
(2) フルガーベージコレクションが発生するタイミング

(1) コピーガーベージコレクションが発生するタイミング

コピーガーベージコレクションは,次のタイミングで発生します。

  1. Eden領域へのアロケーションで空き領域が不足した場合
  2. jheapprofコマンドに-copygcオプションを指定して実行した場合

(2) フルガーベージコレクションが発生するタイミング

フルガーベージコレクションは,次のタイミングで発生します。

  1. New領域(Eden領域とSurvivor領域の合計)で使用しているメモリサイズがTenured領域の最大値に対する未使用メモリサイズを上回っている状態の時に,Eden領域へのアロケーションで空き領域が不足した場合
  2. New領域とTenured領域のそれぞれの未使用メモリサイズを上回るメモリサイズ(Javaオブジェクトのサイズ)のアロケーション要求があった場合
  3. コピーガーベージコレクションの実施の結果,次のどちらかの状態になった場合
    • 確保済みTenured領域の未使用メモリサイズが10,000バイトを下回った場合
    • コピーガーベージコレクション実施時のTenured領域へのオブジェクトの移動によって,確保済みTenured領域の拡張が発生した場合
  4. java.lang.System.gc()メソッドが実行された場合
  5. Permanent領域にアロケーションしたいメモリサイズが確保済みPermanent領域の未使用メモリサイズを上回る場合
  6. javagcコマンドを実行した場合
  7. jheapprofコマンドを実行した場合

JavaVMのチューニングでは,主に1.と2.の発生を抑えることを検討します。

参考
フルガーベージコレクションが発生した場合の要因は,拡張verbosegc情報を使用して確認できます。フルガーベージコレクション発生時に要因を確認する方法については,「7.9 拡張verbosegc情報を使用したフルガーベージコレクションの要因の分析方法」を参照してください。