OutOfMemoryError 例外の受け取り

OutOfMemoryError 例外は、Java™ヒープ領域の容量不足、または MVS のプライベート領域のいずれかの容量不足によって発生する可能性があります。

Javaヒープが枯渇した場合、Javaヒープの OutOfMemoryError 状態を示すエラーメッセージが受信されます。 プロセス・アドレス・スペース (つまり、ネイティブ・ヒープ) が不足すると、ネイティブ割り振りが失敗したことを示すエラー・メッセージを受け取ります。 いずれにせよ、問題はメモリー・リークではなく、単に必要とされるメモリーの定常的な使用状態が使用可能なメモリー量を上回ったと考えられます。 したがって、最初に行うべきことは、どちらのヒープが使い果たされつつあるのかを判別して、そのヒープのサイズを増やすことです。

実際にメモリー・リークが発生して問題が生じている場合には、ヒープ・サイズを大きくしても問題は解決しませんが、OutOfMemoryError 例外またはエラー条件の発生を遅らせることにはなります。 実動システムでは、この遅れが役に立つ場合があります。

割り振り可能なオブジェクトの最大サイズは、使用可能メモリー量によってのみ制限されます。 サポートされる配列要素の最大数は 2 ^ 31-1 で、Java 仮想マシン仕様で許可されている最大数です。 実際には、使用可能メモリー量が原因で大きな配列を割り振れないことがあります。 -Xmx コマンド行オプションを使用して、オブジェクトに使用できるメモリーの総量を構成してください。 このような制限は、31 ビットと 64 ビットの JVM に適用されます。

メモリー不足例外が発生し、エラー・メッセージが生成されない場合は、Java ヒープが使い尽くされている可能性があります。 問題を見つけるために、ヒープ・ダンプをトレースしたり調べたりしてみてください。 詳しくは、 リークのトレース、または J9 VM リファレンスの「 ヒープ・ダンプの使用 」を参照してください。

31 ビット JVM の下で専用ストレージ領域が使い果たされたために OutOfMemoryError 例外がスローされる場合は、 環境変数 _BPX_SHAREASNO に設定されているかどうかを確認してください。 _BPX_SHAREASYES に設定されている場合は、複数のプロセスが同じ仮想ストレージ (アドレス・スペース) を 共有できるようになっています。 その結果、専用ストレージ領域がすぐに使い果たされてしまいます。 _BPX_SHAREASについて詳しくは、 z/OS® 製品資料の「 Setting _BPX_SHAREAS and _BPX_SPAWN_SCRIPT 」を参照してください。

一部のBPXPRMxx設定 (MAXTHREADSなど)によっても、OutOfMemoryError 例外が発生する可能性があります。 詳細は、 OpenJ9 のユーザーガイドの 「システムの構成」 を参照してください。