3

我有一个相当消耗内存的 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 位机器上需要更多内存?

4

3 回答 3

5

可能是因为虚拟机实现在 32/64 位架构之间存在差异,从而消耗更多内存(更广泛的类型,不同的 GC)。

字节码在将任务传递给底层系统时是无关紧要的。我不确定Java和内存效率是我无论如何都会放在一起的两个术语: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 回答