这是我发布的第一个问题。我有一个相当复杂的 OQL 查询,它列出了我们包中加载的类的静态字段。我在针对 Java 1.6.0_24 的“jhat”运行查询时看到的一个问题是“unique”函数无法按预期工作。我预计
select unique(['a', 'b', 'c', 'a'])
返回 ['a', 'b', 'c'] 但它返回 ['a'], wtf?
如果有人感兴趣,实际的完整查询是(用你喜欢的替换“com.mydomain”):
select cl.name + ' -- ' + unique(map(filter(referees(cl), "classof(it).name != 'java.lang.Class' && classof(it).name != 'java.lang.String' && classof(it).name != 'sun.misc.Launcher$AppClassLoader' && classof(it).name != 'java.security.ProtectionDomain' && classof(it).name != '[Ljava.security.cert.Certificate;' && classof(it).name != 'sun.plugin2.applet.JNLP2ClassLoader'"), "classof(it).name")).join(', ')
from instanceof java.lang.Class cl
where /com.mydomain./(cl.name) && ! /com.mydomain.xs.protobuf./(cl.name)
&& length(filter(referees(cl), "classof(it).name != 'java.lang.Class' && classof(it).name != 'java.lang.String' && classof(it).name != 'sun.misc.Launcher$AppClassLoader' && classof(it).name != 'java.security.ProtectionDomain'")) > 0;