これは私の最初の投稿された質問です。パッケージにロードされたクラスの静的フィールドを一覧表示する、かなり複雑なOQLクエリがあります。Java 1.6.0_24の「jhat」に対してクエリを実行する際に見られる問題の1つは、「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;