Interstage Application Server J2EE ユーザーズガイド |
目次
索引
![]() ![]() |
Java仮想マシン(Java VM)は、Javaのバイトコードを解釈・実行する運用環境のエンジン部です。
InterstageのデフォルトJava VMとして動作するFJVMは、Sun Microsystems, Inc.のJava VMであるJava HotSpot Server VMをベースに、富士通独自技術による性能改善やJava VMのトラブルシューティングに関する機能強化などを追加実装したJava VMです。
そのため、FJVMは、Java HotSpot Server VMと機能的な互換性を基本的にもっています。
Sun Microsystems, Inc.のJava VM
Sun Microsystems, Inc.(http://java.sun.com/)のJava VMの詳細は、以下を参照してください。
- http://java.sun.com/docs/hotspot/gc/index.html
- http://java.sun.com/docs/hotspot/VMOptions.html
Javaプログラムが使用するヒープ領域(Javaヒープ領域)は、以下の3つの領域に大別されます。
New世代領域とOld世代領域はインスタンスや配列などのオブジェクトを管理する領域です。領域がNew世代とOld世代に分かれるのは、世代別にガーベッジコレクション(GC)の処理を実行するためです。
New世代領域は寿命の短いオブジェクトを管理します。通常、Javaプログラムで生成要求されたオブジェクトはNew世代領域に生成されます。New世代領域はオブジェクト生成するためのEden領域とGC処理のために利用されるSurvivor領域に分かれます。一定期間New世代領域で生存したオブジェクトはGC処理によってOld世代領域に移動されます。Old世代領域に存在する不要となったオブジェクトはFullGC処理によって回収されます。
Permanent世代領域は、クラスなどの静的オブジェクトを管理します。
FJVMには、Javaヒープ領域管理に対する富士通独自技術である「New世代領域サイズ自動調整機能(New世代領域の大きさを自動的に調整する機能)」を実装しています。
New世代領域サイズ自動調整機能は、以下の条件で有効となります。
Windows版FJVM1.3.1:950MB以下
Windows版FJVM1.4.2:920MB以下
Solaris版FJVM1.3.1の場合:2448MB以下
Solaris版FJVM1.4.2の場合:2340MB以下
Linux版FJVM1.3.1の場合:1150MB以下
Linux版FJVM1.4.2の場合:1600MB以下
また、New世代領域サイズ自動調整機能が有効となった場合、当該機能によりNew世代領域の大きさが自動的に調整(最適化)されるため、下表に示すオプションを指定しても無効となります。
オプション |
オプションの機能 |
FJVM(32ビットモード)の動作 |
-XX:NewSize |
New世代領域のヒープサイズを指定します。 |
指定を無効とします。 |
-XX:MaxNewSize |
New世代領域の最大ヒープサイズを設定します。 |
指定を無効とします。 |
-XX:NewRatio |
New世代領域とOld世代領域のサイズ比率を指定します。 |
指定を無効とします。 |
-XX:SurvivorRatio |
New世代領域を構成するSurvivor領域とEden領域のサイズ比率を指定します。 |
指定を無効とします。 |
-XX:TargetSurvivorRatio |
GC処理後の生存オブジェクトがSurvivor領域を占める割合を、指定したパーセンテージ値に調整します。 |
指定を無効とします。 |
注1) Javaヒープ領域の大きさを指定するオプション(-Xmx)が上記条件に合致しない場合でも、オプションの指定は無効となります。
補足
Javaヒープ領域の大きさを指定するオプション(-Xmx)が上記条件に合致しない場合、FJVM起動時に標準出力へ以下のメッセージが出力されます。その場合、New世代領域サイズ自動調整機能は停止し、上表“FJVMで指定が無効となるオプションの一覧”にあるオプションの指定が、Java HotSpot Server VMと同様に有効となります(注1の記載があるオプションを除く)。FJVM 1.3.1の場合:Heap too large for dynamic eden: using static split eden
FJVM 1.4.2の場合:Heap too large for dynamic eden: using static eden
注意1
Javaヒープ領域の大きさを指定するオプション(-Xmx)に対して、New世代領域サイズ自動調整機能が有効となる範囲でかつその上限値近くの値を指定した場合、New世代領域サイズ自動調整機能が使用する作業域確保("-Xmx"オプションで指定した値の2/3の大きさでリザーブ処理だけの確保)のため、JNI処理モジュールから使用できるメモリ量が非常に少なくなっています。
-Xmxオプションで指定したJavaヒープ領域の大きさを確保し、かつJNI処理モジュールから使用できるメモリ量もある程度確保する必要がある場合には、以下に示す指定により、New世代領域サイズ自動調整機能を無効にしてください。
注意2
プログラムを実行するプロセス空間内で使用できるメモリ量には、各システムごとに異なる上限値があります。そしてJavaプログラムを実行する場合には、-Xmxオプションなどで指定するJavaヒープ領域のほかに、Javaプログラム自身、Java VM、そしてJNI処理モジュールが動作するために使用するメモリ領域も必要です。
そのためプログラムを実行するプロセス空間内で使用できるメモリ量の上限から、Javaプログラム自身、Java VM、そしてJNI処理モジュールが使用するメモリ量などを差し引いた値が-Xmxオプションで指定できる上限となります。
-Xmxオプションに対してその上限を超える値を指定した場合、Java VMは以下のメッセージを出力し、Javaプログラムの実行を中止します。Error occurred during initialization of VM
Could not reserve enough space for object heap
なお-XmxオプションでNew世代領域サイズ自動調整機能が有効となる範囲の値を指定した場合、New世代領域サイズ自動調整機能が使用する作業域の不足などのため、システムによってはNew世代領域サイズ自動調整機能が有効となる範囲内の値であっても、Java VMは上述のメッセージを出力してJavaプログラムの実行を中止する場合があります。その場合は、以下に示す指定により、New世代領域サイズ自動調整機能を無効にしてください。
FJVMのNew世代領域サイズ自動調整機能を無効にする場合には、以下のオプションを指定してください。
-XX:-UseFJGC |
Java HotSpot Server VMと同様に、上表“FJVMで指定が無効となるオプションの一覧”にある各オプション(注1の記載があるオプションも含む)を有効としたい場合は、New世代領域サイズ自動調整機能を無効にしてください。
目次
索引
![]() ![]() |