jmap -heap为我提供了输出:
新一代使用100%,伊甸园空间使用100%,使用空间100%,使用空间:0%,使用的烫发一代:38%
100%的New,Eden,From space - 这是一个问题吗?
我的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。
答案 0 :(得分:5)
这就是世代收藏的运作方式。 你有年轻的空间(伊甸园,从,到)和旧空间(任期,烫发)。年轻的空间更小。一旦年轻的空间充满(你的情况) - 正在发生一种叫做小GC(年轻的GC)的事情。
但是小GC应该很快。一旦旧的空间已满,就会发生GC(这更耗时)。
想法是让更频繁的快速小型GC和更少频繁的完整GC。
您可以在此article
中阅读更详细的说明答案 1 :(得分:2)
我发现以下两个命令非常有用
jstat -gc
或
jstat -gcutil
答案 2 :(得分:-1)
也可以谨慎检查内存泄漏。使用visualVM或其他工具(例如Eckipse内存分析器)并将其附加到进程。
一旦你知道什么是泄漏,你就可以找到持有对象引用的内容,例如
jmap -dump:live,file=heap.dump.out,format=b <pid>
jhat heap.dump.out
另外,只是想知道,这是什么JVM版本,你为GC等传递的参数。