我有一个相当内存饥渴的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位机器需要更多内存?
答案 0 :(得分:5)
可能是因为虚拟机实现在32/64位体系结构之间的区别在于它消耗更多内存(更宽的类型,不同的GC)。
字节码在将任务传递给底层系统时无关紧要。我不确定Java和内存效率是否是我将要组合的两个术语:P
答案 1 :(得分:4)
即使您的字节码相同,JVM也会将其转换为机器代码,因此它与C的原因完全相同,需要更大的内存占用。
答案 2 :(得分:3)
这与您已为C程序列出的原因相同。 64位系统使用大内存地址,导致它“漏洞”(我相信这是我用来描述它的术语)。