Ich konnte ObjectHeap.iterateObjectsOfKlass
(mit Hilfe von SA) aufrufen, um alle Objekte einer bestimmten Klasse zu erhalten. Das Ergebnis ist genau das, was ich erwartet habe, aber die Leistung ist nicht.HotSpot Servicepersonal iterateObjectsOfKlass() ist zu langsam
Es dauerte> 800 Sekunden, um mein Ergebnis zu erhalten, währenddessen die Ziel-VM angehalten wurde. Der Ziel-VM-Heap beträgt etwa 2 GB. Ich weiß iterateObjectsOfKlass
wird iterateExact
anrufen.
Meine Frage ist: diese iterate/traverse den gesamten Heap nur um Objekte für 1 Klasse zu erhalten? Ich bin enttäuscht, da ich mit einer einzelnen Klasse erwarte, dass das Ergebnis innerhalb von 10 Sekunden zurückkehrt.
Gute Frage. In der Ursprungsform war dies jedoch nicht ganz klar (insbesondere für Personen, die mit dem Serviceability Agent nicht vertraut sind). – apangin
Sicher, es muss den gesamten Heap scannen, um alle Objekte aller Art zu finden. Die Art des Filters hat keinen Einfluss auf diese Tatsache. Wie haben Sie erwartet, dass es funktioniert? – Holger
Ich habe nicht erwartet, dass der gesamte Heap gescannt wird. Ich dachte, dass, seit eine Klasse angegeben wurde, iterateObjectsOfKlass in seiner Objektabfrage operativ sein wird. - Matthias. Danke @Holger –