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

发布于 2024-07-25 12:16:51 字数 455 浏览 5 评论 0原文

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

I have a rather memory hungry java application.
On my 32 bit systems with Windows XP Professional the application will just run fine if I give it -Xmx1280m. Everything below will end up in an java.lang.OutOfMemoryError: Java heap space exception.

If I run the same application on a 64 bit Windows XP Professional (everything else exactly the same) it requires -Xms1400m to prevent the OutOfMemory condition.

To my understanding, if I have a C program and I compile it for 32 bit and for 64 bit the
64 bit version will need more memory because pointers are wider and so on.
In my java example however the virtual machine (Sun) is the same and the bytecode is the same.

Why does it need more memory on the 64 bit machine?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泪是无色的血 2024-08-01 12:16:51

可能是因为 32/64 位架构之间的虚拟机实现不同,它会消耗更多内存(更宽的类型、不同的 GC)。

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

Probably because the virtual machine implementation differs between 32/64 bit architecture in such a way that it consumes more memory (wider types, different GC).

The bytecode is irrelevant when it passes on the tasks to the underlying system. Im not sure that Java and memory-efficient are two terms I would put together anyway :P

梦中楼上月下 2024-08-01 12:16:51

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

Even though your bytecode is the same, the JVM converts that to machine code, so it has all the same reasons as C to require a larger memory footprint.

就像说晚安 2024-08-01 12:16:51

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

It's the same reason you already listed for the C program. The 64 bit system uses large memory addresses, causing it to be "leakier" (I believe that's the term I've heard used to describe it).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文