Java 如何在内存分析工具中找到内存泄漏的行

How to find the line of memory leak in Memory Analyze Tool in Java

我有一段代码存在内存泄漏。我找到了 内存分析工具 (MAT),据说它是 Java 的最佳工具之一。它看起来很花哨,并提供了很多问题的细节,以及关于它们的大量信息。但是,它没有说第一个要说的或者我找不到。

假设我的代码如下:

class LeakyClass{
    //do some stuff in thousands of lines 
    void leaky_method(){
        char[] chars = //some how cause memory leak --> line 12434
    }
    //do more stuff in thousands of lines 
}

想想,还有30-40个这样的类,不是我写的

问题是 MAT 告诉我 char[] 有问题,但它没有说明 line 12434 或我找不到。有没有办法找到 that line 或至少 classmethod 名称?如果只有一根线,我会搜索该线,但泄漏可能无处不在?

这是内存泄漏的图像:

顺便说一句,我读了几个教程,但找不到任何相关内容。 提前致谢,

如果您只有 HPROF 堆转储,则此信息不可用。您需要一个分析代理来记录每个分配的分配堆栈跟踪。

比如JProfiler有这个能力。在会话启动对话框中激活分配记录,然后进行堆转储。

在heap walker的"Classes"视图中,select "char[]"并创建一个新的对象集。然后转到堆 walker 的 "Allocations" 选项卡,并检查所有此类分配的累积堆栈跟踪。

免责声明:我公司开发了 JProfiler。