Javaヒープ領域内のメモリ使用状況の確認
前提知識
ガベージコレクション(GC)
アプリケーションが確保したメモリ領域の中で、不要になったものを開放する機能。
ヒープ領域内の構成
Java7の場合
大きく分けてNew, Old, Permanentの3つの領域に分けられる。
New領域はEden, Survivor領域に分けられる。
Survivor領域はFrom, To領域に分けられる。
- New領域(Young):作成されたばかりのオブジェクト(インスタンスや配列)が格納される。
- Old領域(Tenured):古いオブジェクト(Scavenge GCによりFromからToに移動した回数が閾値MaxTenuringThresholdを超えたオブジェクト)が格納される。
- Permanent領域:クラスや定数など、恒久的に利用されるオブジェクトが格納される。
- Eden領域:作成されたオブジェクトが最初に格納される領域。
- Survivor領域:Scavenge GC後生き残ったオブジェクトが格納される領域。(生き残ったオブジェクトがEdenからSurvivorに移動される。)
- From領域:前回のGC時のオブジェクトが格納されている領域。GCにより整理される対象。
- To領域:GC時にEden, From領域で生き残ったオブジェクトが格納される領域。(生き残ったオブジェクトがEden, From領域からTo領域に移動する。)
※Scavenge GC(New GC, Minor GC):New領域対象のGC。Eden領域がいっぱいになると実行される。
※Full GC:Old, Permanent領域対象のGC。Old領域がいっぱいになると実行される。
本題
jstatコマンド
上記で説明したJavaヒープ領域内の各領域の容量・使用量を取得できるコマンド。
JDKに標準で入っている。
測定対象のサンプルコード
import java.util.Scanner; class test{ public static void main(String args[]){ double[] x = new double[10000]; System.out.println("文字を入力してEnterで終了"); Scanner scan = new Scanner(System.in); String str = scan.next(); } }
上記をコンパイルして実行する。
PIDを確認
jps
jstatコマンド実行
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/bin/jstat -gc jpsコマンドで確認したPID
出力結果
Java8の場合
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 512.0 512.0 0.0 0.0 4416.0 989.1 10944.0 0.0 4480.0 873.3 384.0 74.6 0 0.000 0 0.000 0.000
列 | 説明 |
---|---|
S0C | Survivor領域0の現在の容量(KB)。 |
S1C | Survivor領域1の現在の容量(KB)。 |
S0U | Survivor領域0の使用率(KB)。 |
S1U | Survivor領域1の使用率(KB)。 |
EC | Eden領域の現在の容量(KB)。 |
EU | Eden領域の使用率(KB)。 |
OC | Old領域の現在の容量(KB)。 |
OU | Old領域の使用率(KB)。 |
MC | メタスペースの容量(KB)。 |
MU | メタスペースの使用率(KB)。 |
CCSC | 圧縮されたクラス領域の容量(KB)。 |
CCSU | 使用されている圧縮されたクラス領域(KB)。 |
YGC | Young世代のガベージ・コレクション・イベントの数。 |
YGCT | Young世代のガベージ・コレクション時間。 |
FGC | フルGCイベントの数。 |
FGCT | フル・ガベージ・コレクションの時間。 |
GCT | ガベージ・コレクションの総時間。 |
Java7の場合
列 | 説明 |
---|---|
S0C | Survivor領域0の現在の容量 (KB) |
S1C | Survivor領域1の現在の容量 (KB) |
S0U | Survivor領域0の使用率 (KB) |
S1U | Survivor領域1の使用率 (KB) |
EC | Eden領域の現在の容量 (KB) |
EU | Eden領域の使用率 (KB) |
OC | Old領域の現在の容量 (KB) |
OU | Old領域の使用率 (KB) |
PC | Permanent領域の現在の容量 (KB) |
PU | Permanent領域の使用率 (KB) |
YGC | 若い世代のGCイベント数 |
YGCT | 若い世代のガベージコレクション時間 |
FGC | フルGCイベント数 |
FGCT | フルガベージコレクション時間 |
GCT | ガベージコレクション総時間 |