/ / Wie überprüfe ich speziell, welche Java-Zeichenfolgen vorhanden sind, was zu einem Speicherverlust führt? - Java, Heap-Dump

Wie überprüfe ich genau, um welche Java-Zeichenfolgen herumgekommen wird, was zu Speicherverlusten führt? - Java, Heap-Dump

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 № 1

Wenn 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:

Bildbeschreibung hier eingeben

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

Bildbeschreibung hier eingeben

Kurzer Hinweis: Sie können OQL auch in MAT ausführen:

Bildbeschreibung hier eingeben