1. ホーム
  2. java

[解決済み] Windows XPでのJavaの最大メモリ

2022-10-29 08:55:38

質問

32 ビット Windows XP (Java 1.4, 1.5 および 1.6) で実行する Java SE には、常に 1400 メガバイトを割り当てることができました。

java -Xmx1400m ...

今日、私は Java 1.5_16 と 1.6.0_07 を使用して新しい Windows XP マシンで同じオプションを試したところ、エラーが発生しました。

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

試行錯誤の結果、1200メガバイトがこのマシンで割り当てられる最大値であるようです。

あるマシンが 1400 を許可し、別のマシンが 1200 しか許可しない理由について、何か思い当たることはありますか?

編集: このマシンには 4GB の RAM があり、Windows が認識できるのは約 3.5GB です。

どのように解決するのですか?

Windows には仮想メモリ管理があり、JVM は連続したメモリしか必要としないことに留意してください。 アドレス空間において . したがって、システム上で実行されている他のプログラムは、必ずしもヒープサイズに影響を与えるべきではありません。邪魔になるのは、あなたのアドレス空間にロードされる DLL です。残念ながら、Windows の最適化により、リンク時に DLL の再配置が最小限に抑えられているため、アドレス空間が断片化される可能性が高くなります。通常のもの以外に、セキュリティソフト、CBTソフト、スパイウェア、その他のマルウェアなどが、アドレス空間を破壊する可能性があります。ばらつきの原因として考えられるのは、セキュリティパッチやC言語ランタイムのバージョンの違いなどです。デバイス ドライバーおよびその他のカーネル ビットは、独自のアドレス空間 (4GB の 32 ビット空間の残りの 2GB) を持っています。

あなたは

JVM プロセスの DLL バインディングを調べてみて、よりコンパクトなアドレス空間に DLL をリベースすることを検討してみてください。楽しいことではありませんが、もしあなたが絶望的なら...。

別の方法として、64 ビット Windows と 64 ビット JVM に切り替えることができます。他の人が何を提案したかにかかわらず、より多くの RAM を消費することになりますが、その代わりに

より多くの

より連続した仮想アドレス空間が得られ、連続した 2GB を割り当てることは些細なことでしょう。