Interstage Application Serverにおいて、ガーベジコレクションが動作しても、Javaのプロセスで使用しているメモリ量が、-Xmsオプションで指定している値になりません。
- Javaアプリケーションの実行中に、ガーベジコレクションが動作しても、Javaのプロセスで使用しているメモリ量が、-Xmsオプションで指定している値にならないのはなぜですか?
- Javaプログラムを実行するプロセスのユーザー空間は、Javaオブジェクトを格納する領域「Javaヒープ」として使用されるほかに、C/C++プログラムなどを実行する一般のプロセスの場合と同様、プログラムの実体(WindowsでJavaアプリケーションを実行する場合は、java.exeなど)がコピーされるだけでなく、スタックやヒープなどのさまざまな領域としても使用されます。また、実行するプログラムだけでなく、そのプログラムを実行させるためのOS側のプログラムなどでも使用します。そのため、Javaプログラムを実行するプロセスが使用するメモリ量は、必ずJavaヒープの大きさ以上となります。
なお、Javaヒープは、JDK/JRE 1.3以降では、-Xmsオプション/-Xmxオプションで大きさを指定するメモリ割り当てプール(New世代領域とOld世代領域)、および-XX:PermSizeオプション/-XX:MaxPermSizeオプションで大きさを指定するPermanent世代領域から構成されます。Javaヒープに関する初期値/最大値が同じ場合は、通常、Javaヒープ域として使用されるメモリ量は変動しません。しかし、Javaヒープに関する初期値/最大値が異なる場合は、Javaアプリケーション実行に際して使用中となるJavaオブジェクト量に連動して、Javaヒープ域として使用されるメモリ量も変動します。つまり、Javaアプリケーションに対する負荷などによってJavaヒープ域として使用されるメモリ量が変動するため、システム全体としてのメモリ使用量を見積ることが難しくなります。そのため、Javaヒープに関する初期値/最大値は、同じ値にすることをお勧めします。
製品・サービス区分 | Interstage | ||||||
---|---|---|---|---|---|---|---|
製品・サービス情報 |
|
||||||
アンサー種別 | 運用/保守 |