Hitachi

 Hitachi Application Server V10 ユーザーズガイドWindows®用)


3.1.2 SerialGCのメモリー構造とGCの流れについて

Javaのメモリー管理の方式にSerialGCを選択すると、メモリー領域の使用状況に応じて、CopyGCやFullGCが発生します。SerialGCを選択する場合、-XX:+UseSerialGCオプションのほか、メモリー領域に関するオプションを指定します。

SerialGCのメモリー構造

Javaのメモリー管理の方式にSerialGCを選択した場合の、メモリー構造を次の図に示します。

[図データ]

各領域の役割を次の表に示します。

項番

領域の名称

役割

1

Javaヒープ領域

Javaプログラムが使用するメモリー領域です。大きくNew領域とTenured領域に分かれています。

2

New領域

新しいオブジェクトが格納される領域です。Eden領域とSurvivor領域に分かれています。

3

Eden領域

作成直後のオブジェクトが格納される領域です。

4

Survivor領域

New領域に格納されていたJavaオブジェクトのうち、CopyGC実行時に破棄されなかった使用中のオブジェクトが格納される領域です。From空間とTo空間に分かれています。

5

Tenured領域

長時間使用するオブジェクトが格納される領域です。

6

Metaspace領域

ロードされたクラス情報やメソッド情報が格納される領域です。

7

Cヒープ領域

Developer's Kit for Javaがネイティブライブラリーを実行する際に使用する領域です。OS固有領域です。

8

スレッドスタック領域

スレッドごとに保持するスタック領域です。OS固有領域です。

SerialGCの場合のGCの流れ

SerialGCの場合のGCの流れを示します。

[図データ]

  1. 1回目のCopyGC

    生成されたオブジェクトは、 New領域のEden領域に格納されます。Eden領域にオブジェクトがいっぱいになると、1 回目のCopyGCが発生します。CopyGCはNew領域全体を対象としています。CopyGCが発生すると、使用済みのオブジェクトを削除し、使用中のオブジェクトをSurvivor領域のTo空間(S1)に移動します。

  2. 2回目のCopyGC

    1 回目のCopyGC発生後、再びEden領域にオブジェクトがいっぱいになると、2 回目のCopyGCが発生します。CopyGCはNew領域全体を対象とするため、1 回目のCopyGCでEden領域からSurvivor領域のTo空間(S1)に移動したオブジェクトもCopyGCの対象となります。2 回目のCopyGC発生時にEden領域に格納されていた使用中のオブジェクトは、To空間(S2)に移動し、同じくFrom空間(S1)にある使用中のオブジェクトもTo空間(S2)に移動します。

  3. n回目のCopyGC

    Survivor領域に移動したオブジェクトは、CopyGC発生時に使用中の場合、Survivor領域内でFrom 空間とTo空間を交互に移動し続けます。あるオブジェクトについてCopyGCの発生回数が一定の回数を超えると(図の場合15回)、そのオブジェクトはSurvivor領域からTenured領域に移動します。

  4. FullGC

    Tenured領域がオブジェクトでいっぱいになるとFullGCが発生し、Javaヒープ領域全体を対象に使用済みオブジェクトを削除します。

SerialGCの場合に設定するパラメーター

SerialGCの場合、長時間アプリケーションを停止するFullGCが必ず発生するため、FullGCを発生できるタイミングまでFullGCが発生しないようにメモリーの設計・チューニングをする必要があります。SerialGCの場合に設定するパラメーターを示します。

[図データ]

項番

項目

オプション名

説明

1

SerialGCの設定

-XX:+UseSerialGC

メモリー管理方式にSerialGCを選択します。このパラメーターは、デフォルトで有効です。

2

メモリーの設計

-XmxJavaヒープ領域の最大サイズ

Javaヒープ領域の最大サイズを設定します。

3

-XmsJavaヒープ領域の初期サイズ

Javaヒープ領域の初期サイズを設定します。このパラメーターは、-Xmxオプションと同じ値の設定を推奨します。

4

-XX:MaxMetaspaceSize=Metaspace領域の最大サイズ

Metaspace領域の最大サイズを設定します。

5

-XX:MetaspaceSize=Metaspace領域に起因するFullGC の基準値

Metaspace領域に起因するFullGCの基準値を設定します。Metaspace領域のサイズが基準値を超えるとFullGCが発生するため、アプリケーションで必要なクラス情報のサイズから見積もった値を設定します。このパラメーターは、-XX:MaxMetaspaceSizeオプションと同じ値の設定を推奨します。

6

-XX:CompressedClassSpaceSize=Compressed Class Spaceの最大サイズ

圧縮オブジェクトポインター機能が有効な場合にMetaspace領域内に作成されるCompressed Class Space領域の最大サイズを設定します。このパラメーターは、-XX:MaxMetaspaceSizeオプションと同じ値の設定を推奨します。

7

-XX:NewRatio=New領域に対するTenured領域の割合

New領域を1とした場合のTenured領域の割合を設定します。

8

-XX:SurvivorRatio=Survivor領域のFrom空間とTo空間に対するEden領域の割合

Survivor領域のFrom空間とTo空間を1とした場合の、Eden領域の割合を設定します。