为什么JVM在生产中占用的内存比localhost多三倍?

时间:2014-03-02 04:21:14

标签: java performance jvm jvm-crash

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

2 个答案:

答案 0 :(得分:2)

  1. 粗略地说,Java应用程序总是使用与使用-Xmx分配的内存一样多的内存。在生产中,堆扩展到该限制,直到垃圾收集器启动。但是,当JVM扩展或缩小堆空间时,这是一个非常简化的规则,这是一个更复杂的问题。

  2. JIT将在生产中生产越来越大的机器代码。

  3. 因此,如果您只是在本地启动应用程序并通过几次单击来加热它,就不会有更多的对象垃圾,从而使堆扩展。并且没有必要JIT这些方法,因为没有人经常使用它。

答案 1 :(得分:1)

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