1

我使用 NetBeans 分析器(实际上是一个嵌入式 VisualVM)来监视我的 Java 应用程序的内存消耗。我使用视图、幸存生成视图和内存转储来跟踪内存泄漏。

堆视图显示了已用内存的总量,但由于垃圾收集器管理内存的方式,它有点混乱。该图基本上是锯齿形的,因此不是特别可读。有时,我会强制 GC 发生,以便获得更精确的实际内存消耗值。

我想知道:是否有更适合内存分析的垃圾收集器,并且会产生更接近实际内存使用情况的堆图?或者更一般地说,我可以使用哪些 JVM 设置(-XX选项或其他)来有效地跟踪内存泄漏?

示例堆图

4

2 回答 2

4

您在图表中看到的应用程序内存利用率的真实行为。重复的锯齿模式可能是由于分配了正在清除的短寿命对象。如果您认为您有内存泄漏,请获取堆转储快照并查看堆中保留了哪些对象。您可以使用JConsole拍摄快照并使用HPjmeter打开生成的转储文件。

于 2011-03-14T17:49:48.073 回答
1

我建议您使用您打算在没有分析器的情况下使用的 GC。使用这种方法,您将获得一个更像应用程序行为方式的图表,尽管并不总是那么可读。

如果您想要一个更具可读性但不那么真实的图表,您可以将最小内存大小增加到 1 GB。这将导致更少的 GC 和更少的尖峰图,但除了使图更漂亮之外可能对您没有帮助。

于 2011-03-14T17:50:20.243 回答