32位进程在64位系统上运行时是否需要更多内存?

时间:2009-07-01 19:57:55

标签: java windows-xp 64-bit 32-bit out-of-memory

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

3 个答案:

答案 0 :(得分:5)

可能是因为虚拟机实现在32/64位体系结构之间的区别在于它消耗更多内存(更宽的类型,不同的GC)。

字节码在将任务传递给底层系统时无关紧要。我不确定Java和内存效率是否是我将要组合的两个术语:P

答案 1 :(得分:4)

即使您的字节码相同,JVM也会将其转换为机器代码,因此它与C的原因完全相同,需要更大的内存占用。

答案 2 :(得分:3)

这与您已为C程序列出的原因相同。 64位系统使用大内存地址,导致它“漏洞”(我相信这是我用来描述它的术语)。