2

我有一些内存泄漏的代码。我找到了内存分析工具 (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命名?如果只有一条线,我会搜索这条线,但泄漏可能无处不在?

这是内存泄漏的图像: 内存泄漏

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

4

1 回答 1

1

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

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

在堆遍历器的“类”视图中,选择“char[]”并创建一个新的对象集。然后转到堆遍历器的“分配”选项卡,并检查所有此类分配的累积堆栈跟踪。

在此处输入图像描述

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

于 2015-11-06T10:50:53.393 回答