分割ヒープ(Windowsのみ、非推奨)
多くの Java™ アプリケーション・ワークロードは、Java ヒープ・サイズに依存します。 SDK は、分割ヒープを使用して 32 ビット Windows メモリー・スペースの制限を回避し、最大ヒープ・サイズを大きくすることができます。 この機能は、32 ビット JVM で実行する必要があるが (例えば、32 ビット JNI ライブラリー、32 ビット・オペレーティング・システム、または 32 ビット・ハードウェアが原因で)、大きな Java ヒープを必要とするアプリケーションに役立ちます。
注: -Xgc:splitheap コマンド行オプションは、バージョン 8 で非推奨になり、 IBM SDK の将来のバージョンから削除される予定です。
Windows アドレス・スペースの中断により、Java ヒープが 2 GB 未満に制限されます。 分割ヒープを使用して、アドレス・スペースの切断の両側に Java ヒープが存在できるようにします。 連続したメモリー領域を 1 つ使用する場合よりも大きなヒープを割り振ることができることがあります。 より大きなヒープを使用することにより、ガーベッジ・コレクションが行われる前により多くのオブジェクトを割り振ることができます。また、OutOfMemoryError 例外が発生する前に、使用できるライブ・オブジェクトの数を増やすことができます。
分割ヒープを有効にするには、 -Xgc:splitheap コマンド行オプション (Windows 32 ビット JVM でのみ使用可能) を使用します。 このオプションを使用すると、以下の動作も有効になります。
- ガベージコレクタは、強制的にgencon(generational concurrent)ガベージコレクションポリシーを使用するようになります。
- 世代別 Java ヒープの新しい領域と古い領域は、メモリーの別々の領域に割り振られます。
- 新旧のメモリ領域のリサイズは無効です。
アプリケーションが以下のいずれかの方法で動作する場合、分割ヒープは推奨されません。
- gencon ガーベッジ・コレクション・ポリシーではうまく動作しない場合。
- 非常に多くのクラスをロードする場合。
- JNI ライブラリーで大量のネイティブ・システム・メモリーを使用します。増加したサイズの Java ヒープは、アプリケーションのアドレス・スペースを過剰に予約する可能性があります。
制約事項: Windows 32 ビット・プロセスは、 boot.ini ファイルで /3GB オプションが指定されていない限り、2 GB のアドレス・スペースに制限されます。 詳しくは、「 SDK ユーザー・ガイド 」の「 Windows 32 ビットラージ・アドレス認識サポート 」を参照してください。
分割ヒープを使用すると、古い領域はメモリーの下位領域の最大サイズ (-Xmoxで設定)にコミットされ、新しい領域はメモリーの上位領域の最大サイズ(-Xmnxで設定)にコミットされます。
割り振りの失敗
分割ヒープを使用する場合、JVM が始動時に失敗する原因が増える場合があります。 以下のメッセージは、分割ヒープの割り振りの失敗により表示されます。
- JVMJ9GC064古いスペースを割り振ることができませんでした
- 低位メモリーに、古い領域を割り振るために十分なフリー・スペースがありません。 この問題を解決するには、-Xmoxを減らしてください。
- JVMJ9GC065新しいスペースを割り振ることができませんでした
- 高位メモリーに、新しい領域を割り振るために十分なフリー・スペースがありません。 この問題を解決するには、-Xmnxを減らしてください。
- JVMJ9GC066必要な分割ヒープ・メモリー形状を割り振ることができませんでした
- 新しい領域が、古い領域よりも下位に割り振られました。 この問題を解決するには、-Xmxを減らしてください。
最大ヒープ・サイズ
標準的な最大ヒープ・サイズは以下のとおりです。
- 32–bit JVM を使用する 32 ビット・ハードウェア上の Windows 7 32 ビット
- 1800 MiB の古い領域および 1000 MiB の新しい領域。
-Xgc:splitheap -Xmx2800m -Xmox1800m - 32–bit JVM を使用する 64 ビット・ハードウェア上の Windows 7 64 ビット
- 1700 MiB の古い領域および 2000 MiB の新しい領域
-Xgc:splitheap -Xmx3700m -Xmox1700m
多数のクラスをロードする場合、多数のネイティブ・ライブラリーをロードする場合、または複数のスレッドを開始する場合、アプリケーションの最大ヒープ・サイズは低下します。