对象查询语言引用

时间:2012-09-07 19:38:31

标签: java oql

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

有问题的对象的许多实例由“org.hibernate.internal.util.collections.IdentityMap”引用。如何构造一个OQL查询来返回hibernate引用的对象的确切实例数?

1 个答案:

答案 0 :(得分: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