Java heapdump分析查找实例化对象的源

时间:2012-07-17 09:17:16

标签: java heap out-of-memory jvisualvm jhat

我正在使用jvisualvm分析堆转储。从报告中我可以看到类,实例数和大小。

我想知道的是 - 这些对象的源(实例化了哪个类)。对于给定的对象,如果我能够知道所有源类和每个类创建的实例数,我想可以很容易地识别出错误的候选者。

这有可能吗?如果是这样,是否有比其他工具更好的工具来提供此类信息?

3 个答案:

答案 0 :(得分:3)

YourKit按大小和数量提供分配跟踪。您可以搜索创建的特定类并查找热点。评估版是免费的。 ;)

答案 1 :(得分:0)

尝试:

http://dr-brenschede.de/bheapsampler了解易于理解的摘要或   http://www.eclipse.org/mat进行更详细的分析

这些工具可以满足您的需求

答案 2 :(得分:0)

你试过吗

jhat <yourdump>

假设您的作品形式为:

私人Blah blah = new Blah();

对于每个实例,您都可以看到谁拥有对它的引用。它还提供了强大的查询语言[OQL]。 请参阅示例: jhat OQL AND in where clause

但是如果你在其他地方创建它并简单地将它传递给另一个类字段,那么你将无法通过内存转储[使用任何工具]找到它,因为它只是一个快照。 / p>