JVMのヒープサイズと変更方法
稼動中のJVMのヒープサイズを知りたくなることは良くあるのでその方法。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 かの小さい方。 |
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)
ヒープサイズの変更方法
ヒープ領域は、次のオプションで変更できる。
例)
-Xms1024m -Xmx1024m
上記オプションには、プログラム格納用の領域のPermanet領域は割り当てられないので注意が必要である。 Permanet領域はデフォルトで64MBのようなので、プログラムサイズが足りないときは増やす必要がある。 この値は、次のオプションで変更できる。
例)
-XX:MaxPermSize=128m
参考
1
OracleJava 1.5以降のはなし