6

Gerade heute entdeckte ich Speicherverlust in meiner App mit einer großen Anzahl von Objekten als anonyme Klassen erstellt. Es war ein klassisches Beispiel, dass für jedes Objekt eine eigene Klasse definiert und in Heap abgelegt wurde.Wie finde ich GC-Wurzeln von anonymen Klassen in Java?

Es war nicht trivial, in Runtime-Speicher-Profiler und Heap-Dump-Analyse von Eclipse Memory Analyzer getan wurde, war auch nicht hilfreich.

Ich frage mich, wie alle anonymen Klassen protokolliert werden, die in Runtime mit Thread-ID (oder zumindest Eltern-Classloader) erstellt werden.

Ich denke, diese einzige Sache allein würde die Suche nach der Ursache trivial machen.

Antwort

1

Ich bin nicht sicher, ob die Auflistung aller anonymen Klassen Sie irgendwo hinbringen wird, es gibt typischerweise eine Menge von ihnen.

Was Sie wahrscheinlich brauchen, ist Logik, nach Instanzen von Klassen zu suchen, die von inneren Klassenreferenzen (die anonyme Klassen enthalten) beibehalten werden.

In JProfiler, gibt es eine entsprechende Inspektion:

enter image description here

die gestellte Aufgabe durch die Inspektion erstellen enthält alle Fälle und Sie können dann einen Pfad zu einem GC Wurzel zeigen:

enter image description here

Haftungsausschluss: Meine Firma entwickelt JProfiler.

Verwandte Themen