web-dev-qa-db-ja.com

オブジェクトヒープがJVMを起動するための十分なスペースを予約できませんでした

奇妙な問題に直面しました。入力するとき

Java -version

私は得た

Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

Java -Xms64m -Xmx64m -version

このコマンドは正常に動作します

Java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode)

Xms、xmxを128mに変更すると、再びエラーが発生します。

topコマンドとfree -m 192 mb以上の空き容量があることがわかります。なぜこのエラーが発生するのですか?

Mem:    262144k total,    64760k used,   197384k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached

ありがとうございました

21
user12384512

これを実行しようとしているマシンには256 MBのメモリしかないようです。

JVMは、64 MBのメモリの大きな連続ブロックを割り当てようとする可能性があります。空きのある192 MBは小さな断片に断片化される可能性があるため、64 MBの連続した空きブロックは割り当てられません。

より小さいヒープサイズでJavaプログラムを開始してみてください。例えば:

Java -Xms16m ...
11
Jesper

64ビット環境でJavaの32ビットバージョンを使用する場合、64 OSで64 Javaを使用する場合は問題ありませんでした。

14
Yamada

this post によると、このエラーメッセージは次のことを意味します。

ヒープサイズがコンピューターの物理メモリよりも大きい。

編集:ヒープだけが予約されているメモリではない、と思う。少なくとも、メモリを要求するPermGenSpaceのような他のJVM設定があります。ヒープサイズが128Mで、PermGenSpaceが64Mの場合、使用可能なスペースはすでにいっぱいです。

他のメモリ設定を小さくして、ヒープ用のスペースを解放してみませんか?

5
mico