7.3 明示管理ヒープ機能で使用するメモリ空間の概要
この節では,明示管理ヒープ機能で使用するメモリ空間であるExplicitヒープの構造について説明します。なお,JavaVMで使用するメモリ空間の構成については,マニュアル「アプリケーションサーバ システム設計ガイド」の「7.2.6 SerialGC使用時のJavaVMで使用するメモリ空間の構成とJavaVMオプション」もあわせて参照してください。
Explicitヒープは,GCの対象にならないメモリ空間です。複数のメモリブロックで構成されます。Explicitヒープを構成するメモリブロックをExplicitメモリブロックといいます。Explicitヒープは,Explicitメモリブロック全体を表す概念です。
初期化や解放などの操作は,Explicitメモリブロック単位で実行します。
Explicitヒープの概念を次の図に示します。
Explicitヒープの最大サイズは,JavaVM起動オプションの-XX:HitachiExplicitHeapMaxSizeオプションで設定します。-XX:HitachiExplicitHeapMaxSizeオプションの詳細については,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「-XX:HitachiExplicitHeapMaxSize(Explicitメモリブロックの最大サイズ指定オプション)」を参照してください。生成(初期化)できるExplicitメモリブロックの数は,最大1,048,575個です。この数を超えて生成することはできません。
- Explicitヒープ領域の確保のタイミングについて
-
-XX:HitachiExplicitHeapMaxSizeオプションで指定したExplicitヒープの最大サイズの実メモリ領域が,JavaVMを起動したタイミングで確保されます。領域は,JavaヒープおよびMetaspace領域からの連続領域として確保されます。
JavaオブジェクトをExplicitメモリブロックに配置するために必要なメモリが不足している場合,JavaVM起動時に確保したExplicitヒープの領域から,Explicitメモリブロック向けのメモリ領域を確保します。このため,Explicitメモリブロック内のメモリ領域は複数の領域に分かれていることがあります。
仮想メモリ空間の利用イメージを次の図に示します。
図7‒5 仮想メモリ空間の利用イメージ Explicitヒープ用の領域は連続領域になりますが,一つのExplicitメモリブロックで使用する領域が,非連続になります。