Java VisualVM-Speicher - sampler, wie man die Größe einer bestimmten Klasse
Meiner Anwendung verbraucht viel mehr Speicher als ich denke, dass es wohl zu verwenden, und ich versuche zu verstehen, welche Klasse ist die Verwendung einer großen Menge an Speicher und vielleicht nicht loslassen.
Ich bin mit VisualVM und in der Erinnerung sampler kann ich sehen, dass die meisten der Speicher ausgegeben wird, auf Chars, Strings und Bytes, alle meine Klassen verwendet Strings, aber wie Sie wissen, die VisualVM zeigt ALLE Chars und Strings in das system (alle Chars sind identisch die Zeichenfolgen, die es schwierig macht, zu verstehen, wer hält Sie),
wie ich verstehe, die Größe der anderen Klassen halten, dass diese strings berechnet wird, ohne die Saiten.
Wie kann ich in diesem tool sehe, wer sind die "Echten" größte Klassen - diejenigen, die enthält alle diese strings? (vorzugsweise, wenn ich von diesen Klassen in die Saiten und nicht die andere Weise herum)
Ich habe versucht, die "Wurzel auf die nächste GC" in der heapDump aber es gibt über 4,000,000 Strings also die chance, mich zu finden, die "Problematik" ist sehr klein...
Dank!!!
- Ich denke, man kann nicht ausdrücklich sagen, welche Klasse mit wie viel Speicher. Wenn Sie instanziieren ein Objekt der anderen Klasse in einer anderen Klasse, wie würden Sie es angehen? Auch meines Wissens können Sie nicht bekommen, eine Klasse basierend meomory-Auslastung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie einen heap-dump, finden Sie die 20 größten Objekte (einschließlich aller Raum, in dem es Referenzen). Für alles weitere empfehle ich die Verwendung der OQL, die Konsole ist sehr mächtig.
Im Grunde, Sie sind auf der Suche nach den folgenden:
Ich schlage vor, Sie nehmen eine zufällige Zeichenfolge zu finden ist referrees und analysieren Sie diese, bis Sie herausfinden, ein möglicher Verdächtiger. Sobald Sie dies vermuten, können Sie eine OQL query mit http://visualvm.java.net/oqlhelp.html#rsizeof, um herauszufinden, die Gesamt Größe dieser Objekte.
Machen einen heap-dump, öffnen Sie es mit MAT und suchen Sie im Histogramm für die größte Beibehalten Größen.