Windows XP での Java メモリ割り当て制限の調査
Java プログラミングの領域では、開発者は最大メモリ割り当ての問題に取り組むことがよくあります。 Windows XP では、Java SE アプリケーションに 1200 メガバイト (MB) を超える領域を割り当てるときに、特に複雑な問題が発生します。以前のバージョンの Java では 1400 MB が許容されていましたが、最近の更新ではこの下限が課せられたようです。
根本原因の詳細
この矛盾を理解するには、次のことが重要です。メモリ割り当ての基礎となるメカニズムを解明します。システムが十分な物理 RAM (例: 4GB) を備えている場合でも、Java 仮想マシン (JVM) は独自のアドレス空間内に連続したメモリを必要とします。その結果、同時に実行されている他のプログラムやプロセスによって、JVM で使用可能な連続メモリが実質的に減少する可能性があります。
断片化に寄与する要因
残念ながら、Windows では、断片化を最小限に抑えるために採用されている最適化が行われていません。リンク中に DLL を再配置すると、アドレス空間の断片化が発生する可能性があります。セキュリティ ソフトウェア、スパイウェア、特定のバージョンの C ランタイムなど、さまざまなアプリケーションが、32 ビット Windows の限られた 2GB 仮想アドレス空間内のメモリ空間をめぐって競合します。
問題への対処
考えられる解決策の 1 つは、JVM プロセスの DLL バインディングを調べて、DLL をよりコンパクトなアドレス空間にリベースすることを試みることです。ただし、このアプローチは手間がかかり、必ずしも満足のいく結果が得られるとは限りません。
代わりのより簡単な解決策は、64 ビット バージョンの Windows および Java に移行することです。これにより、全体的により多くの RAM が消費される可能性がありますが、はるかに大きな連続した仮想アドレス空間が提供され、JVM に 2GB 以上を簡単に割り当てることができます。
以上がWindows XP で Java アプリケーションが 1200MB を超える領域を割り当てられないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。