Ich kann in der Heapdump-Datei sehen, dass die String-Klasse den Speicher erschöpft hat, aber woher weiß ich genau, was diese Strings sind?
Antworten:
3 für die Antwort № 1Wenn du benutzt VisualVM
Sie können ein paar verwenden OQL
Abfrage, um die Daten in Java-Heap zu lesen, die Sie suchen. Ein Befehl, der Ihren Anforderungen entspricht, ist:
select {instance: s, content: s.toString()} from java.lang.String s
where /java/(s.toString())
Hier finden Sie noch viel mehr: https://visualvm.java.net/oqlhelp.html
0 für die Antwort № 2
Ich simulierte dies mit einer kleinen Spring Boot-Anwendung und Eclipse Speicheranalysator. Der Heap-Dump wurde in MAT erstellt, Sie können jedoch auch den bereits erstellten Heap-Dump öffnen.
Wenn Sie den Heap-Dump öffnen, zeigt MAT Ihnen automatisch Verdächtige an, die viel Speicher verbrauchen:
Wenn Sie die Details öffnen, sehen Sie die String
Instanzen und ihre Werte (in meinem Screenshot gelb markiert) im Abschnitt aufgerufen Accumulated Objects in Dominator Tree
Kurzer Hinweis: Sie können OQL auch in MAT ausführen: