如何在Java中的Memory Analyze Tool中找到内存泄漏行

时间:2015-11-01 09:30:46

标签: java memory-leaks heap-memory eclipse-memory-analyzer

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

这是内存泄漏的图像: mem-leak

顺便说一下,我读过几本教程但却找不到任何相关内容。 提前谢谢,

1 个答案:

答案 0 :(得分:1)

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

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

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

enter image description here

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