繁体   English   中英

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”视图中,选择“char[]”并创建一个新的对象集。 然后转到 heap walker 的“Allocations”选项卡,并检查所有此类分配的累积堆栈跟踪。

在此处输入图片说明

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM