【发布时间】:2012-07-16 04:40:33
【问题描述】:
我正在使用 jvisualvm 分析堆转储。从报告中我可以看到类、实例数和占用的大小。
我想知道的是 - 这些对象的来源(哪个类实例化)。对于给定的对象,如果我能知道所有源类以及每个类创建的实例数,我想就很容易识别出不好的候选对象。
这可能吗?如果是这样,有没有比其他工具更好的工具来提供此类信息?
【问题讨论】:
标签: java out-of-memory heap-memory jvisualvm jhat
我正在使用 jvisualvm 分析堆转储。从报告中我可以看到类、实例数和占用的大小。
我想知道的是 - 这些对象的来源(哪个类实例化)。对于给定的对象,如果我能知道所有源类以及每个类创建的实例数,我想就很容易识别出不好的候选对象。
这可能吗?如果是这样,有没有比其他工具更好的工具来提供此类信息?
【问题讨论】:
标签: java out-of-memory heap-memory jvisualvm jhat
YourKit 按大小和数量提供分配跟踪。您可以搜索创建的特定类并找到热点。评估版是免费的。 ;)
【讨论】:
试试:
http://dr-brenschede.de/bheapsampler 以获得易于理解的摘要或 http://www.eclipse.org/mat进行更详细的分析
这些工具完全符合您的要求
【讨论】:
你试过了吗
jhat <yourdump>
假设您的创作是以下形式:
私有的 Blah blah = new Blah();
对于每个实例,您都可以看到谁拥有对它的引用。它还提供了强大的查询语言 [OQL]。 请参阅示例: jhat OQL AND in where clause
但是,如果您在其他地方创建它并简单地将其传递给另一个类字段,您将无法从内存转储中找到它[使用任何工具],因为它只是一个快照。
【讨论】: