Hitachi

Cosminexus V11 アプリケーションサーバ システム設計ガイド


7.15.3 New領域を対象としたGCの仕組み

JavaVMでは,YoungGCまたはMixedGCの対象になるNew領域のメモリ空間を,Eden領域,Survivor領域に分けて管理します。さらに,Survivor領域は,From空間とTo空間に分けられます。From空間とTo空間は,同じメモリサイズです。

New領域の構成を次の図に示します。

図7‒18 New領域の構成

[図データ]

Eden領域は,newによって作成されたオブジェクトが最初に格納される領域です。プログラムでnewが実行されると,Eden領域のメモリが確保されます。

Eden領域がいっぱいになると,YoungGCまたはMixedGCが実行され,次の処理が実行されます。

  1. Eden領域およびSurvivor領域のFrom空間にあるJavaオブジェクトのうち,使用中のJavaオブジェクトが,Survivor領域のTo空間にコピーされます。使用されていないJavaオブジェクトは破棄されます。

  2. Survivor領域のTo空間とFrom空間が入れ替わります。

この結果,Eden領域とTo空間は空になり,使用中のオブジェクトはFrom空間に存在することになります。

YoungGCまたはMixedGC実行時に発生するオブジェクトの移動を次の図に示します。

図7‒19 CopyGC実行時に発生するオブジェクトの移動

[図データ]

このようにして,使用中のオブジェクトは,YoungGCまたはMixedGCが発生するたびに,From空間とTo空間を行ったり来たりします。ただし,寿命の長いオブジェクトを行き来させ続けると,移動処理の負荷などが問題になります。これを防ぐために,From空間とTo空間でJavaオブジェクトを入れ替える回数にしきい値を設定して,年齢がしきい値に達したJavaオブジェクトはTenured領域に移動させるようにします。