为什么 JVM 在生产中占用的内存是本地主机的三倍



我的 webApp 在 prod (linus, tomcat 7.0.22) 中占用 390 MB 内存,而在本地环境中同样需要大约 106 MB 内存。我继续使用 eclipse MAT 调查堆问题,但不明白为什么同一个应用程序会在生产中消耗如此截然不同的内存?任何线索都会有所帮助。

  1. 粗略地说,Java 应用程序使用的内存始终与您使用 -Xmx 分配给它的内存量大致相同。在生产中,堆会扩展到该限制,直到垃圾回收器启动。但是,这是一个相当简化的过程,当JVM扩展或缩小堆空间时,规则要复杂得多。

  2. JIT 将在生产中生成更多更大的机器代码。

因此,如果您只是在本地启动应用程序并通过单击几下对其进行预热,则不会再有对象垃圾,从而使堆不断扩展。而且没有必要对方法进行JIT,因为没有人经常使用它。

这种差异是微不足道的,几百兆字节对于正在运行的应用程序来说仍然相当小。这里似乎没有问题。

最新更新