我们有一个在 Mac 上运行的 Java 1.5 应用程序。这是一个 32 位 VM。堆内存在限制范围内。当我们将此应用程序移至运行 Java 1.5(64 位)的 Linux 时,我们发现内存利用率增加了 50%。在 Linux 中,jvm 的内存占用会这么高吗?我们在 Linux 上有针对此问题的补丁吗?
答案1
64 位应用程序通常需要比 32 位应用程序更多的内存(更大的变量、指针等)。这以及两个系统之间的不同 JVM 实现可能是原因。
我个人并不认为这很奇怪,所以我不会认为这是一个问题,除非内存使用量开始疯狂上升,或者出现一些类似的性能问题。
答案2
在 64 位环境中,所有指针都占用两倍的空间。长整数可能也是如此,但我认为在两种情况下它们都已经是 64 位了。
这对你的影响有多大取决于你的具体情况,任何对象引用都是一个指针。如果你的对象主要是指向其他对象的链接,它们就会被炸毁。
Linux 有 32 位 JVM 版本。坏消息是,一旦超出 32 位,您需要从 2-3GB 增加到 4-6GB 才能达到同等水平。