0

我正在尝试分析堆转储以确定我的休眠缓存设置是否是原因。

相关对象的许多实例由“org.hibernate.internal.util.collections.IdentityMap”引用。如何构造一个 OQL 查询来返回我的对象​​实例的确切数量,这些实例被 hibernate 引用?

4

1 回答 1

0

如果你很幸运,你也许可以让dominatorof()函数工作,试试这样的:

SELECT * FROM ".*" o WHERE classof(dominatorof(o)).@displayName.contains("class org.hibernate.internal.util.collections.IdentityMap")

但这会使 MAT 遍历堆中的每个对象,因此返回结果需要很长时间(假设您有一个相当大的堆)。然而真正的问题是我发现dominatorof()函数不一致,所以你可能找不到每个对象。如果您有一个类列表,那么您可以加快查询速度并确认您获得了正确的支配者。例如,如果 X 和 Y 是类名,您可以使用 "X|Y" 作为正则表达式而不是 ".*" 并运行此查询以查看您得到的结果:

SELECT dominatorof(o) FROM "X|Y" o
于 2012-09-15T18:18:40.243 回答