[英]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”视图中,选择“char[]”并创建一个新的对象集。 然后转到 heap walker 的“Allocations”选项卡,并检查所有此类分配的累积堆栈跟踪。
免责声明:我公司开发 JProfiler。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.