我正在使用 jvisualvm 分析堆转储。从报告中我可以看到类、实例数和占用的大小。
我想知道的是 - 这些对象的来源(哪个类实例化)。对于给定的对象,如果我可以知道所有源类以及每个类创建的实例数,我想很容易识别出不好的候选对象。
这可能吗?如果是这样,是否有比其他工具更好的工具来提供此类信息?
我正在使用 jvisualvm 分析堆转储。从报告中我可以看到类、实例数和占用的大小。
我想知道的是 - 这些对象的来源(哪个类实例化)。对于给定的对象,如果我可以知道所有源类以及每个类创建的实例数,我想很容易识别出不好的候选对象。
这可能吗?如果是这样,是否有比其他工具更好的工具来提供此类信息?
YourKit 按大小和数量提供分配跟踪。您可以搜索创建的特定类并找到热点。评估版是免费的。;)
你试过了吗
jhat <yourdump>
假设您的作品具有以下形式:
私人废话=新废话();
对于每个实例,您都可以看到谁拥有对它的引用。它还提供了强大的查询语言 [OQL]。参见示例: jhat OQL AND in where 子句
但是,如果您在其他地方创建它并简单地将其传递给另一个类字段,您将无法从内存转储中找到它[使用任何工具],因为它只是一个快照。