2012-01-05 7 views
7

基本的に、一部のコンピュータでJVMオプション-Xmx(最大ヒープサイズ)を設定すると、システムに十分なRAMがある場合でも、JVMの初期化に失敗することがあります。-Xmxを高すぎると、RAMが使用可能になってもJVMが失敗することがあるのはなぜですか?

たとえば、4GBのマシンでは、-Xmx1024mが失敗しますが、-Xmx800mが機能します。私は1GBのマシン、2GBのマシンでも理解できますが、特にWindows、LinuxなどがRAMを交換することができると考えると、4GBのマシンではなぜこれは失敗しますか?

私は、あなたの最大ヒープサイズを減らすと言っている多くのスレッドと質問を見たことがありますが、なぜ私が本当に探しているものなのか説明できません。

また、特定のサイズまでのメモリを消費する方法について教えてください。

+0

すばやく検索すると、スワップスペースがほとんどないのに、JVMで '-Xmx'をテラバイトに設定することができます。テストしたコマンドとJVMのバージョンを正確に共有できますか? – alf

+0

@alf、 '-Xmx'は最大ヒープサイズを設定します。これは単純に仮想アドレス空間の予約範囲のサイズです。 '-Xms'で指定された量だけが実際にコミットされたストレージによってバックアップされます。たとえば、['VirtualAlloc'](http://msdn.microsoft.com/en-us/library/windows/desktop/aa366887%28v=vs.85%29.aspx)を参照し、' MEM_RESERVE'と 'MEM_COMMIT 'フラグ。 –

+0

@JeffreyHantin私は、ジェフリーです。そういうわけで私はOPが何をしたのか尋ねていたのです。 – alf

答えて

13

virtual address space fragmentationが原因である可能性があります。 DLLのロードアドレス、スレッドのスタック位置、固定ネイティブメモリ割り当て、カーネル予約アドレスなどによっては、連続した 1024MBのアドレス範囲をヒープの潜在的な最大サイズに予約することはできません。 32ビットプロセス。

1

I came across this issue a while ago with Windows XP。私が1400MBを割り当てることができる1台のほとんどのXPマシンと、それ以外のものは1200MBでした。他の答えでは、Jeffrey Hantinが述べているように、コンセンサスは断片化していました。

関連する問題