Windows XP での Java の最大メモリ割り当ての不一致への対処
以前の動作とは異なり、1400 メガバイトのメモリを割り当てるときにエラーが発生します。新しい Windows XP マシン上の Java SE の場合。別の Windows XP デバイスで同じ構成を正常に利用したにもかかわらず、割り当ての試行は失敗し、新しいシステムでは 1200 メガバイトしか予約できません。この記事では、この不一致の背後にある考えられる理由を詳しく掘り下げます。
仮想メモリの役割とアドレス空間の脆弱性
Windows は仮想メモリ管理を実装し、JVM がメモリを利用できるようにします。アドレス空間内で断片化された方法で。その結果、システム上に他のアクティブなプログラムが存在しても、割り当てられたヒープのサイズに直接影響を与えることはありません。ただし、アドレス空間に DLL がロードされると問題が発生する可能性があります。
アドレス空間断片化の犯人の特定
Windows の最適化により、リンク中の DLL の再配置が最小限に抑えられ、アドレスが破損する可能性が高まります。空間の断片化の問題。セキュリティ ソフトウェア、CBT ソフトウェア、スパイウェア、マルウェアなどの特定のプログラムは、使用可能な連続アドレス スペースをさらに減らす可能性があります。
マシン間の差異の考えられる原因
相違点セキュリティ パッチ、C ランタイム バージョン、デバイス ドライバー、およびその他のカーネル コンポーネントでは、2 つの間で利用可能なアドレス空間にばらつきが生じる可能性があります。
アドレス空間の断片化への対処
面倒なプロセスが必要になる可能性がありますが、JVM プロセスで DLL バインディングを手動で調整し、DLL をリベースしてみることもできます。よりコンパクトなアドレス空間に変換されます。この方法では、DLL バインディングを注意深く調べる必要があります。
代替解決策: 64 ビット アーキテクチャを採用する
あるいは、64 ビット アーキテクチャに切り替えることで、この問題を軽減できます。ビット版の Windows と 64 ビット JVM。より多くの RAM を消費しますが、より多くの連続した仮想アドレス空間を獲得できるため、2 GB を連続して簡単に割り当てることができます。
以上が私の Java アプリケーションがこの Windows XP マシン上で 1400MB を割り当てられないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。