JVM进程vs JVM堆内存使用情况

我已经读过这个进程内存VS堆 - JVM,我也有同样的问题。

jvm进程的内存使用量不断增加,从不缩水。我通过在linux服务器上做了一个顶部检查。 该应用程序将作业调度到集群(使用Quartz + Sun Java DRMAA API)

Java堆空间在应用程序生命周期中处于限制范围内,但jvm进程显示内存使用率稳步攀升,并且永远不会下降。

这是内存泄漏吗? 如果是这样,为什么堆空间在限制范围内。 有人可以解释这一点。

更新:当我通过jconsole进行跟踪时,我有-Xmx1600m -Xms1600m,我可以在450米范围内看到堆空间,但最高命令显示该进程正在使用超过900米。


使用的总虚拟内存是最大堆+线程堆栈+直接内存+ perm gen +共享库的总和。 这永远不会缩小。

实际使用的主内存取决于有多少虚拟内存被占用。 共享库是共享的,因此具有多个JVM不会导致这种内存翻倍等。

JVM从不释放内存给操作系统,但是如果主存储器很长一段时间没有使用,如果需要的话它可以被换出。


实际的内存消耗比你用Xmx等设置的要多,这是正常的。 “java将为其他内容分配内存,包括每个线程的堆栈,VM的总内存消耗超过-Xmx的值并不罕见。”


参数-Xmx1600m -Xms1600m告诉JVM最小分配1600MB内存,最大分配1600MB内存。 所以JVM应该在启动时分配1600MB,永远不会释放它。

如果您希望JVM将内存释放回操作系统,那么-Xms应该尽可能低,并且您可能必须在新的G1垃圾收集器中使用Java 1.7。 stefankrause.net/wp/?p=14。

使用Mac OS X 10.8和Java 1.7与-Xms32m -Xmx256m -XX:+ UseG1GC -XX:MinHeapFreeRatio = 5 -XX:MaxHeapFreeRatio = 10在运行System.gc()后,内存将释放回操作系统。

链接地址: http://www.djcxy.com/p/19839.html

上一篇: JVM Process vs JVM Heap memory usage

下一篇: Why is the maximum size of the Java heap fixed?