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

Kat*_*hir 19 java memory heap jvm process

我已经阅读了这个Process Memory Vs Heap - JVM ,我遇到了同样的问题.

jvm进程内存使用量不断增加而且从不收缩.我通过在linux服务器上做一个top来检查.应用程序正在将作业调度到集群(使用Quartz + Sun Java DRMAA API)

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

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

更新:当我通过jconsole跟踪时,我有-Xmx1600m -Xms1600m我可以看到堆空间在这个限制范围内,距离为450m,但是top命令显示该进程使用超过900m.

Pet*_*rey 12

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

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

JVM从不向操作系统释放内存,但是如果长时间不使用主内存,则可以在需要时将其换出.

  • 我在系统日志消息上看到以下错误,这基本上杀死了java进程`Jul 18 04:55:31 seqwd5内核:内存不足:被杀进程16333,UID 501,(java).7月18日04:55:31 seqwd5内核:java调用oom-killer:gfp_mask = 0x201d2,order = 0,oomkilladj = 0` (2认同)
  • 只是注释,JVM可以将内存释放回OS。请从Oracle参考该页面。http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6498735 (2认同)