5

jmap -heap 给我的输出是:

新代使用率 100%,伊甸园空间使用率 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 正在使用中。

4

3 回答 3

6

这就是世代收集的工作原理。你有年轻空间(eden、from、to)和老空间(tenure、perm)。年轻的空间更小。一旦年轻空间已满(您的情况) - 称为次要 GC(年轻 GC)的事情正在发生。

但次要 GC 应该很快。一旦旧空间已满,就会发生完整的 GC(这更耗时)。

想法是拥有更频繁的快速次要 GC 和更少频繁的完整 GC。

您可以在本文中阅读更详细的说明

于 2012-06-29T03:18:02.757 回答
3

我发现以下两个命令非常有用

jstat -gc

或者

jstat -gcutil
于 2012-06-28T14:23:15.020 回答
-1

检查内存泄漏可能是谨慎的。使用 visualVM 或其他一些工具(例如 Eckipse 内存分析器)并将其附加到进程。

一旦你知道什么是泄漏的,你就可以找到持有对对象的引用的东西,例如

jmap -dump:live,file=heap.dump.out,format=b <pid>

jhat heap.dump.out

另外,只是想知道这是什么 JVM 版本,您为 GC 传递的参数等。

于 2012-06-28T14:31:00.567 回答