Java 对象查询语言引用程序

Java 对象查询语言引用程序,java,oql,Java,Oql,我正在尝试分析堆转储,以确定是否是我的hibernate缓存设置造成的 该对象的许多实例都由“org.hibernate.internal.util.collections.IdentityMap”引用。如何构造OQL查询以返回hibernate引用的对象实例的确切数量?如果幸运的话,您可以让dominatorof()函数正常工作,请尝试以下操作: SELECT * FROM ".*" o WHERE classof(dominatorof(o)).@displayName.contains("

我正在尝试分析堆转储,以确定是否是我的hibernate缓存设置造成的


该对象的许多实例都由“org.hibernate.internal.util.collections.IdentityMap”引用。如何构造OQL查询以返回hibernate引用的对象实例的确切数量?

如果幸运的话,您可以让
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