7

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

したがって、たとえば、4GBのマシンでは、-Xmx1024mが失敗しますが、-Xmx800mは機能します。1GBのマシンでも2GBのマシンでも理解できましたが、4GBのマシンでは、特にWindowsやLinuxなどがRAMをスワップアウトできることを考えると、なぜこれが失敗するのでしょうか。

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

また、特定のサイズまで必要なだけメモリを消費するとはどういう意味ですか?

4

2 に答える 2

13

これは、仮想アドレス空間の断片化が原因である可能性があります。DLLのロードアドレス、スレッドのスタック位置、不動のネイティブメモリ割り当て、カーネル予約アドレスなどによっては、特に32の場合、ヒープの潜在的な最大サイズに対して連続した1024MBのアドレス範囲を予約できない場合があります。 -ビットプロセス。

于 2012-01-05T23:11:13.453 に答える
1

私はしばらく前にWindowsXPでこの問題に遭遇しました。ほとんどのXPマシンでは、1400MBを割り当てることができましたが、他のマシンでは1200MBしか割り当てられませんでした。ジェフリー・ハンティンが他の答えで言っているように、コンセンサスは断片化でした。

于 2012-01-05T23:34:21.057 に答える