32 ビット プロセスを 64 ビット システムで実行する場合、より多くのメモリが必要ですか?

StackOverflow https://stackoverflow.com/questions/1071029

質問

かなりメモリを消費する 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 ビット システムは大きなメモリ アドレスを使用するため、「リーキ」が発生します (これを説明するために使用されているのを聞いた用語だと思います)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top