2011-07-10 5 views
21

ちょっと変わった問題に直面しました。私はオブジェクトヒープが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、128メートルにXmxのを変更した場合、私は再びエラーが発生します。

topコマンドとfree -mを使用すると、私は192 MB以上の空きがあることがわかります。なぜこのエラーが発生するのですか?

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

それはあなたが上でこれを実行しようとしているマシンのように見えます
+0

今日私は突然この問題を抱えていました。私はOpenJDK JRE 7に切り替えました。通常、この問題は表示されないOracle JDK 8を使用しています。 –

答えて

11

のみ256 MBのメモリを持っていただきありがとうございます。

多分、JVMは、64 MBのメモリの大きな連続したブロックを割り当てようとします。空き容量がある192 MBは、64 MBの空き領域が連続していないように、より小さな部分に分割される可能性があります。

には、例えば、小さなヒープサイズを使用してJavaプログラムを起動してみてください:

java -Xms16m ... 
+0

はい、私のマシンは256MBしかなく、-Xms16mと-Xms64mでうまく動作します。しかし、64は私のニーズには十分ではありません。それは何とか修正することができます、私は128 MBを使用することができますか? – user12384512

+0

'-Xms'は初期ヒープサイズを設定します(' -Xmx'は最大ヒープサイズを設定します)。あなたのプログラムは本当に**最初の**ヒープサイズ64 MBが必要ですか? JVMを自動的に拡張させてみませんか? – Jesper

+0

はい、わかります。しかし、それは本当に問題ではありません。 java -Xms16m -Xmx128m -versionも失敗したので – user12384512

5

this postによると、このエラーメッセージの意味:

ヒープサイズは、コンピュータの物理メモリよりも大きくなっています。

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

ヒープのスペースを解放するために他のメモリ設定をダウンサイズしないのはなぜですか?

12

64ビット環境で32ビット版のjavaを使用する場合、同じ問題が発生しました。 64個のOSで64個のJavaを使用している場合は、大丈夫でした。

+0

私は同じ問題があります。 64ビットシステムでの32ビットJavaの使用Xmx1024から上記のエラーが発生しました。 Xmx512から始めるとうまくいきます! – T3rm1

+0

私は同じ問題を抱えていました。 64ビットPCで32ビットJREを使用していました。私は64ビットシステムにJREを変更し、私の問題は解決されました。 – Devrim