2014/3/25

稼動中のJVMのヒープサイズを知りたくなることは良くあるのでその方法。1

1 JVMの初期ヒープサイズ

JVMは、サーバーモードで起動しているのか、クライアントモードで起動しているかで、 初期割り当てのヒープサイズが異なる。

サーバーモードなのかクライアントモードなのかは、実行ユーザにて、下記コマンドで確認できる。

$ java -version
java version "*****"
Java(TM) SE Runtime Environment (build ******)
Java HotSpot(TM) Server VM (build ******)

Severモードの場合は、 Server の表記があるはず。

サーバーモード

初期ヒープサイズ マシンの物理メモリーの 1/64 か、妥当な最小サイズかの大きい方。
最大ヒープサイズ 物理メモリーの 1/4 か、1GB かの小さい方。

2 JVMの稼動時のヒープサイズ

JVMの使用しているヒープの量を調べる(以降、すべてOracleJava)。

$ sudo jstat -gc 28905
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT
127552.0 137152.0  0.0   68410.3 224000.0 107742.6  996736.0   113947.3  61440.0 61324.8      7    1.323   1      0.045    1.368

割りあてられた容量を見るには、*Cのサイフィックス、使用量を見るには、*Uのサフィックスに着目する(単位はKb)。

S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
127,552.0 137,152.0 0.0 68,410.3 224,000.0 107,742.6 996,736.0 113,947.3 61,440.0 61,324.8 7 1.323 1 0.045 1.368
容量(概算)
S0C + S1C + EC + OC + PC = 127 + 137 + 224 + 996

この場合、ヒープ領域の合計は、約1,484MBとなる。

ここで注意が必要なのは、ヒープ領域はnew演算子で割りあてられる領域であるということ。

プログラムがロードされる領域であるPermanent領域は、 ヒープ領域とは別に管理される場所なので注意が必要。 上記の場合、Permanent領域は、PCの61MBとなる。 (Permanent領域のデフォルトサイズは、64MB)

3 ヒープサイズの変更方法

ヒープ領域は、次のオプションで変更できる。

例)

-Xms1024m -Xmx1024m

上記オプションには、プログラム格納用の領域のPermanet領域は割り当てられないので注意が必要である。 Permanet領域はデフォルトで64MBのようなので、プログラムサイズが足りないときは増やす必要がある。 この値は、次のオプションで変更できる。

例)

-XX:MaxPermSize=128m

Footnotes:

1

OracleJava 1.5以降のはなし

blog comments powered by Disqus