3

私はかなりメモリを消費するJavaアプリケーションを持っています。Windows XP Professional を搭載した私の 32 ビット システムでは、アプリケーションを指定すると問題なく動作します-Xmx1280m。以下のすべてがjava.lang.OutOfMemoryError: Java heap space例外になります。

-Xms1400m同じアプリケーションを 64 ビットの Windows XP Professional で実行すると (他はまったく同じ) 、OutOfMemory 状態を防ぐ必要があります。

私の理解では、C プログラムがあり、それを 32 ビット用にコンパイルし、64 ビット用にコンパイルすると、64 ビット バージョンではポインタがより広くなるため、より多くのメモリが必要になります。ただし、私の Java の例では、仮想マシン (Sun) は同じで、バイトコードも同じです。

64 ビット マシンでより多くのメモリが必要なのはなぜですか?

4

3 に答える 3

5

おそらく、仮想マシンの実装が32/64ビットアーキテクチャ間で異なり、より多くのメモリを消費するためです(より広いタイプ、異なるGC)。

バイトコードは、基になるシステムにタスクを渡す場合は関係ありません。Javaとメモリ効率がとにかくまとめる2つの用語であるかどうかはわかりません:P

于 2009-07-01T20:04:50.090 に答える
4

バイトコードが同じであっても、JVMはそれをマシンコードに変換するため、Cと同じ理由で、より大きなメモリフットプリントが必要になります。

于 2009-07-01T20:04:44.147 に答える
3

これは、Cプログラムにすでにリストしているのと同じ理由です。64ビットシステムは大きなメモリアドレスを使用するため、「リーク」になります(これは、私が聞いた言葉で、それを説明するために使用されたと思います)。

于 2009-07-01T20:05:04.410 に答える