特定の値を超えるXmx、XX:MaxPermSizeでEclipseがクラッシュするのはなぜですか?
質問
3.5ギガバイトのRAMを搭載したWinXP SP3 32BitでEclipse 3.5.1、JDK 1.6.0_17を実行します。
既知の Eclipseのベストプラクティスはまだわかっていますが、 eclipse.iniを把握しようとしています。
これは起動します:-Xmx588m
そしてこれはしません:-Xmx589m
。
-XX:MaxPermSize
と同じ。 -XX:MaxPermSize=140m
を超えるものは起動しません。
死の画面は this (こちら)。
これがなぜ起こるのかについてのアイデアはありますか
解決
このEclipseのバグを参照してください。
一般的な問題は、jvmがこのために連続したメモリブロックを必要とすることです。 Windowsでは、プロセスは2ギガバイトを取得し、ロードされる他のライブラリはメモリ空間の異なる領域に配置されます。ライブラリがたまたま中央に配置される場合は、基本的に使用できる半分のサイズにカットします。
Eclipseランチャーは、グラフィックスを実行するためにいくつかのシステムdllをロードします。特に、user32.dllは、マシンにインストールされているものに応じてサードパーティライブラリがロードされる可能性があります(こちら)。
より高いメモリ制限を達成するために、jvmを強制的にEclipseランチャーとは別のプロセスにフォークすることができます。 vmがメモリを初期化するまで、jvmプロセスはこれらの追加ライブラリをロードしません。これを行うには、javaw.exeを指す-vm引数を使用します。
eclipse -vm C:\jdk\jre\bin\javaw.exe
他のヒント
方法の提案については、このバグ203325 も参照してください。次のようなツールを使用して、メモリの使用状況を監視します。
- JConsole
- メモリモニターツール(日食ツール)
注:ここにコメント:
最大メモリ制限を宣言しない場合、OSメモリマネージャに委ねられます。
-Xmx <size>
は、J2MEのような小さなデバイスのプログラミングに役立ちます。
メモリが制限されている小型デバイス用にプログラミングしている場合、PCを使用している場合でも、-Xmx
JVMプロパティを使用して小型デバイスをエミュレートできます。