32 ビット プロセスを 64 ビット システムで実行する場合、より多くのメモリが必要ですか?
-
21-08-2019 - |
質問
かなりメモリを消費する Java アプリケーションがあります。Windows XP Professional を搭載した 32 ビット システムでは、アプリケーションは問題なく動作します。 -Xmx1280m
. 。以下のすべては最終的に次のようになります。 java.lang.OutOfMemoryError: Java heap space
例外。
64 ビット Windows XP Professional で同じアプリケーションを実行する場合 (その他はすべてまったく同じです)、 -Xms1400m
OutOfMemory 状態を防ぐため。
私の理解のために、私がCプログラムを持っていて、32ビットでコンパイルし、64ビットで64ビットバージョンにはポインターが広いため、より多くのメモリが必要になります。ただし、私の Java の例では、仮想マシン (Sun) は同じであり、バイトコードも同じです。
64 ビット マシンではなぜより多くのメモリが必要なのでしょうか?
解決
おそらく、 仮想マシン 実装は 32 ビット アーキテクチャと 64 ビット アーキテクチャの間で異なり、より多くのメモリを消費します (より幅広いタイプ、異なる GC)。
バイトコードは、タスクを基礎となるシステムに渡すときは無関係です。いずれにせよ、Java とメモリ効率の高い 2 つの用語を組み合わせるべきかどうかはわかりません :P
他のヒント
バイトコードが同じであっても、JVM はそれをマシンコードに変換するため、より大きなメモリフットプリントが必要になるのは C と同じ理由です。
これは、C プログラムについてすでに挙げた理由と同じです。64 ビット システムは大きなメモリ アドレスを使用するため、「リーキ」が発生します (これを説明するために使用されているのを聞いた用語だと思います)。