首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JVM进程与JVM堆内存的使用

JVM进程与JVM堆内存的使用
EN

Stack Overflow用户
提问于 2011-07-22 04:46:28
回答 4查看 42.4K关注 0票数 21

我读过这个Process Memory Vs Heap -- JVM,我也有同样的问题。

jvm进程内存使用量一直在增加,而且从未收缩。我在linux服务器上做了一个顶部检查。应用程序正在将作业调度到集群(使用Quartz +)

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

这是内存泄漏吗?如果是这样的话,为什么堆空间在限制之内。有人能解释一下吗。

更新:,我有-Xmx1600m -Xms1600m,当我通过jconsole跟踪时,我可以很好地看到堆空间在这个限制范围内--大约450米--但是顶部的命令显示进程使用的时间超过900米。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-22 06:40:47

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

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

JVM从不向操作系统释放内存,但是如果很长一段时间没有使用主内存,则可以在需要时将内存交换出去。

票数 17
EN

Stack Overflow用户

发布于 2011-07-22 05:26:58

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

票数 2
EN

Stack Overflow用户

发布于 2012-07-31 08:29:44

参数-Xmx1600m -Xms1600m告诉JVM至少分配1600 at内存,最多分配1600 at内存。因此JVM应该在启动时分配1600 it,并且永远不要释放它。

如果您希望JVM将内存释放回操作系统,那么-Xms应该很低,您可能需要在新的G1垃圾收集器中使用Java1.7。/wp/?P=14。

使用MacOSX10.8和Java1.7和-Xms32m -Xmx256m -XX:+UseG1GC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10,在运行System.gc()之后,将将内存释放回操作系统。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6785754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档