Ich kann in der Heapdump-Datei sehen, dass die String-Klasse Speicher erschöpft, aber woher weiß ich speziell, was diese Zeichenfolgen sind?Wie überprüfe ich speziell, welche Java-Zeichenketten beibehalten werden, was zu Speicherlecks führt?
0
A
Antwort
3
Wenn Sie VisualVM
verwenden, können Sie einige OQL
Abfrage verwenden, um die Daten in Java-Heap, die Sie suchen, zu lesen. Ein Befehl, der Ihren Bedarf anpassen kann, ist:
select {instance: s, content: s.toString()} from java.lang.String s
where /java/(s.toString())
Sie viel mehr finden Sie hier: https://visualvm.java.net/oqlhelp.html
0
ich simuliert dies mit einer kleinen Feder Boot-Anwendung und Eclipse Memory Analyzer. Der Heap-Dump wurde in MAT erstellt, aber Sie können auch den bereits erstellten Heap-Dump öffnen.
Wenn Sie die Heapdump MAT automatisch öffnen zeigt Ihnen den Verdacht hegt, die viel Speicher verwenden:
Wenn Sie die Details öffnen können Sie die String
Instanzen und ihre Werte sehen (gelb markiert in meinem Screenshot) in dem Accumulated Objects in Dominator Tree
Kurzinformation genannt Abschnitt: Sie OQL aus MAT laufen:
Das sieht nützlich aus! Kann ich eine dümmer Frage stellen, wo führe ich diese Abfrage aus? Gibt es eine Konsole in JVisualVm oder so? –
@OneTwoThree: Es gibt sowohl Befehlszeilen- als auch visuelle Werkzeuge, Sie können die vollständige Dokumentation auf ihrer Website sehen. Es ist ein sehr nützliches Werkzeug – Pooya