【问题标题】:How to find the line of memory leak in Memory Analyze Tool in Java如何在 Java 中的内存分析工具中找到内存泄漏的行
【发布时间】:2015-11-01 09:30:46
【问题描述】:

我的代码有一些内存泄漏。我发现了Memory Analyze Tool (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 名称?如果只有一条线,我会搜索这条线,但泄漏可能无处不在?

这是内存泄漏的图像:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-15
      • 2011-01-09
      • 1970-01-01
      • 2011-01-07
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多