ObjectHeap.iterateObjectsOfKlass
(SAの助けを借りて)を呼び出すと、特定のクラスに属するすべてのオブジェクトを取得できました。結果はまさに私が予想したものですが、パフォーマンスはそうではありません。HotSpot ServiceabilityエージェントのiterateObjectsOfKlass()が遅すぎる
ターゲットVMが中断されている間に、結果が出るまでに800秒以上かかりました。ターゲットVMヒープは約2GBです。私はiterateObjectsOfKlass
がiterateExact
に電話することを知っています。
私の質問です:これらのメソッドは、1クラスのオブジェクトを取得するためにのみヒープ全体を繰り返し/トラバースしますか?私は、1つのクラスで10秒以内に結果が返ってくるはずだと私は期待していますので、私はがっかりです。
しかし、それは起源の形態(特にServiceability Agentに精通していない人たち)ではあまり明確ではありませんでした。 – apangin
もちろん、あらゆる種類のオブジェクトを見つけるためにヒープ全体をスキャンする必要があります。フィルターのタイプはその事実に影響を与えません。どのようにそれが動作すると思いますか? – Holger
私はヒープ全体がスキャンされることを期待していませんでした。私は、クラスが指定されて以来、iterateObjectsOfKlassがそのオブジェクトの検索において外科手術になると考えていました。 - マティアス。おかげで@Holger –