7.11.2 メモリ使用量を削減する仕組み
HTTPセッションが格納されるExplicitヒープ領域のExplicitメモリブロックは,アプリケーションがHTTPセッションを作成するたびに作成されます。HTTPセッションに関するオブジェクトは,作成されたExplicitメモリブロックに配置されます。
この機能を利用しない場合と利用する場合の比較によって,メモリ使用量を削減する仕組みを説明します。
(1) HTTPセッションで利用するExplicitヒープの省メモリ化機能を利用しない場合
HTTPセッションに関するオブジェクトが格納されるExplicitメモリブロックが三つある場合の例を次の図に示します。このうち,BとCのExplicitメモリブロックは,利用率が低く,長時間利用されていないHTTPセッションに関連づけられたExplicitメモリブロックです。
HTTPセッションで利用するExplicitヒープの省メモリ化機能を利用していない場合,自動解放が発生したときも,ExplicitメモリブロックA〜Cは解放されません。この場合,HTTPセッションに関するオブジェクトが格納されるExplicitメモリブロックの使用済みサイズは,HTTPセッションに関するオブジェクトの総バイト数に一致します。また,Explicitメモリブロックの個数は有効なセッション数に一致します。
ただし,小さいサイズのオブジェクトを格納する場合も,Explicitメモリブロックは一定サイズ以上の大きさで確保されるため,Explicitヒープ領域のメモリは,実際に必要なExplicitメモリのサイズ以上に消費されます。
(2) HTTPセッションで利用するExplicitヒープの省メモリ化機能を利用する場合
HTTPセッションに関するオブジェクトが格納されるExplicitメモリブロックが三つある場合の例を次の図に示します。このうち,BとCのExplicitメモリブロックは,利用率が低く,長時間利用されていないHTTPセッションに関連づいたExplicitメモリブロックです。また,自動配置設定ファイルに指定したオブジェクトが格納されるExplicitメモリブロックとして,Dがあります。
HTTPセッションで利用するExplicitヒープの省メモリ化機能を利用している場合,自動解放が発生したタイミングで,HTTPセッションで利用するExplicitヒープの省メモリ化機能が実行されます。利用率が低いExplicitメモリブロックであるBおよびCが解放され,このExplicitメモリブロックに格納されていたHTTPセッションに関するオブジェクトはDに移動します。
このように,利用率の低いExplicitメモリブロックに格納されていたオブジェクトをほかの領域に移動して集約して,利用率の低いExplicitメモリブロックを解放することで,Explicitメモリブロックの利用率が向上します。