jmap -heap 给了我输出:
新一代使用100%,Eden空间使用100%,从空间使用100%,到使用空间:0%,烫发一代使用:38%
这是 100% 的新伊甸园、来自太空 - 一个问题吗?
我的 JAVA OPTS 是: -Xms10240m -Xmx14336m -XX:PermSize=192m -XX:MaxPermSize=256m -XX:NewSize=8192m -XX:MaxNewSize=8192m -XX:-DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60
我看到很多快速垃圾收集。但是使用JConsole等工具不会泄漏内存
内存使用情况可以在此处查看:http://tinypic.com/view.php?pic=wo213&s=6
JDK 1.6 正在使用中。
这就是世代集合的工作方式。你有年轻的空间(伊甸园,从,到)和旧空间(任期,烫发)。年轻的空间更小。一旦年轻的空间被填满(你的情况) - 所谓的小GC(年轻的GC)正在发生。
但次要 GC 应该很快。一旦旧空间已满,就会发生完整的 GC(这更耗时)。
想法是拥有更频繁的快速次要 GC 和更少频率的完整 GC。
您可以在本文中阅读更详细的解释
我发现以下两个命令非常有用
jstat -gc
或
jstat -gcutil
检查内存泄漏可能是谨慎的。 使用 visualVM 或其他工具(例如 Eckipse 内存分析器)并将其附加到进程中。
一旦你知道什么是泄漏的,你就可以找到什么保存对对象的引用,例如
jmap -dump:live,file=heap.dump.out,format=b <pid>
jhat heap.dump.out
另外,只是想知道,这是什么 JVM 版本,您为 GC 传递的参数等。