我有一些内存泄漏的代码。我找到了内存分析工具(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
名称?如果只有一条线路,我会搜索线路,但泄漏可能到处都是?
顺便说一下,我读过几本教程但却找不到任何相关内容。 提前谢谢,
答案 0 :(得分:1)
如果您只有HPROF堆转储,则此信息不可用。您需要一个分析代理程序来记录每个分配的分配堆栈跟踪。
例如,JProfiler具有此功能。在会话启动对话框中激活分配记录,然后进行堆转储。
在" Classes"查看堆沃克,选择" char []"并创建一个新的对象集。然后转到" Allocations"堆walker的选项卡,并检查所有此类分配的累积堆栈跟踪。
免责声明:我公司开发JProfiler。