Interstage Application Server チューニングガイド
目次 索引 前ページ次ページ

第8章 JDK/JREのチューニング> 8.1 基礎知識

8.1.5 Javaヒープとガーベジコレクション

 本節では、JDK/JRE 1.3以降のJavaヒープガーベジコレクション(GC)を、簡単に説明します。

■Javaヒープとガーベジコレクション

 Javaヒープは、Javaプロセス内に存在するJavaオブジェクトを格納するための領域です。

 Javaヒープは、New世代領域Old世代領域およびPermanent世代領域に大別され,Java VMが管理・制御します。なお、New世代領域Old世代領域は、メモリ割り当てプールという形で各領域を合わせて一括的に管理・制御します。

 Java VMは、Javaアプリケーションの実行時に、JavaオブジェクトをJavaヒープの各領域に格納します。Javaヒープの空き容量がなくなった場合は、java.lang.OutOfMemoryErrorがスローされます。

 また、不要となったJavaオブジェクトはGCにより回収され、Javaヒープの空き領域が増加します。なお、Old世代領域Permanent世代領域に存在する不要となったJavaオブジェクトを回収するGC処理を、特にFullGC処理といいます。

[図1 Javaヒープの構造]

ユーザ空間

 Javaヒープは、Javaプロセスのユーザ空間内に割り当てられます。
 このため、Javaヒープの最大値を大きく設定すると、その分だけスタックなど他の処理に割り当てられるメモリ領域が減少します。

ユーザ空間

 Java VMは、OSの仮想メモリ資源を効率的に利用するために、起動時にJavaヒープの各領域の初期値を割り当て、各領域の最大値まで段階的に拡大する制御方法を用いています。
 具体的には、Javaプロセスの起動時はメモリ割り当てプールおよびPermanent世代領域の各初期値のサイズを割り当てます。その後、FullGC処理の結果、各領域が不足した場合、各領域の最大値まで、段階的に拡大していきます。
 なお、各領域を拡大していく過程で、OS側で物理メモリの資源をディスクにスワップする処理が発生する場合があります。このスワップ処理により、各領域を拡大するFullGC処理に時間がかかる場合があります。FullGC処理中のスワップ処理発生による時間遅延が問題になる場合は、Javaヒープの各領域に対する初期値と最大値は同じ値に指定してください。

ガーベジコレクションのログ

 GCのログを採取する方法は、"ガーベジコレクションのログ出力"を参照してください。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2007