0

このエラーが発生しました:

Exception in thread "543" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2894)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:117)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:407)
at java.lang.StringBuffer.append(StringBuffer.java:241)

このコマンドで開始されたアプリケーションでは:

java -Xms1024M -Xmx3072M -jar MyJar.jar >> /var/log/MyLog.log 2>&1 &

OS は 4GB RAM の 27% が使用されていると報告しました。

私の計算では、約 2GB の空きヒープ領域があったはずです。なんらかの理由で、JVM が最初のヒープ サイズからヒープ サイズを増やさなかったのでしょうか?

実際に利用可能なヒープ領域でこのエラーを引き起こす可能性があるものはありますか?

これはすべて 1.6JVM 上にあることに注意してください。具体的には: java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.el6_3.x86_64

編集: 構築中の文字列は 2GB の長さにすることはできません。オブジェクトの固定長配列から構築され、数百文字を超えることはありません。

4

2 に答える 2

0

割り当てられているオブジェクトがヒープに収まらない場合、OutOfMemoryError がスローされます。ヒープは、使用中のガベージ コレクタに応じて世代に分割される場合があります。ガベージ コレクションの後でも、割り当てられている配列が適切なメモリ セグメントよりも大きい場合、メモリがまだ残っていても、JVM は OutOfMemory をスローする可能性があります。

これに該当するかどうかを確認するには、作成できなかった配列のサイズをログに記録してみてください。

于 2013-01-20T19:25:57.487 に答える
0

Javaがメモリを割り当てようとして(あなたの場合は on Array#copyOf)、 -Xmx オプションで指定された最大ヒープサイズに収まらないことがわかった場合、実際の割り当ては実行されませんが、OOM例外がスローされます。これが、OS が使用中の RAM の 27% を報告する理由です。

于 2013-01-20T19:25:59.093 に答える