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
或至少 class
或 method
名称?如果只有一根线,我会搜索该线,但泄漏可能无处不在?
这是内存泄漏的图像:
顺便说一句,我读了几个教程,但找不到任何相关内容。
提前致谢,
如果您只有 HPROF 堆转储,则此信息不可用。您需要一个分析代理来记录每个分配的分配堆栈跟踪。
比如JProfiler有这个能力。在会话启动对话框中激活分配记录,然后进行堆转储。
在heap walker的"Classes"视图中,select "char[]"并创建一个新的对象集。然后转到堆 walker 的 "Allocations" 选项卡,并检查所有此类分配的累积堆栈跟踪。
免责声明:我公司开发了 JProfiler。
我有一段代码存在内存泄漏。我找到了 内存分析工具 (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
或至少 class
或 method
名称?如果只有一根线,我会搜索该线,但泄漏可能无处不在?
这是内存泄漏的图像:
顺便说一句,我读了几个教程,但找不到任何相关内容。 提前致谢,
如果您只有 HPROF 堆转储,则此信息不可用。您需要一个分析代理来记录每个分配的分配堆栈跟踪。
比如JProfiler有这个能力。在会话启动对话框中激活分配记录,然后进行堆转储。
在heap walker的"Classes"视图中,select "char[]"并创建一个新的对象集。然后转到堆 walker 的 "Allocations" 选项卡,并检查所有此类分配的累积堆栈跟踪。
免责声明:我公司开发了 JProfiler。