So finden Sie Täter-Klasse / Objekt durch Blick auf Speicher-Profiler Ergebnis in VisualVM

8

Ich profiliere meine Java-Anwendung mit VisualVM und ich habe

durchgemacht

profiling_with_visualvm_part_1

profiling_with_visualvm_part_2

Wenn ich das Ergebnis des Speicherprofils sehe, sehe ich Millionen von Objects[] , Char[] , String und andere solche fundamentalen Objekte, die erstellt wurden, die den gesamten Speicher belegen. Ich möchte wissen, welche meiner Klassen (oder mein Code) tatsächlich für die Erstellung dieser Objects[] und String usw. verantwortlich sind. Bisher konnte ich sie nicht finden. Sobald ich die Täterklasse kenne, kann ich den Code eintauchen und beheben.

Ich habe einen Filter com.mypackage.* , aber ich sehe, dass sie alle um ein Vielfaches kleiner sind (manchmal 0 Byte) verglichen mit der Gesamtgröße von Objects[] , Char[] , String Objekte.

Ich glaube, es sollte einen Weg geben, den Schuldigen zu finden. Sonst wird Profiler nicht viel nutzen.

Lassen Sie mich wissen, wenn meine Frage nicht klar ist, werde ich versuchen, weiter zu klären.

    
Watt 09.09.2013, 17:52
quelle

1 Antwort

2

Wenn Sie sehen möchten, welcher Code diese Instanzen zuweist, gehen Sie zu 'Speichereinstellungen' und aktivieren Sie 'Record allocations stack traces'. Die Option 'Record allocations stack traces' wird erklärt 'Profiling with VisualVM Teil 2 '. Sobald Sie es aktiviert haben, profilieren Sie Ihre Anwendung und erstellen Sie einen Snapshot der Profilergebnisse. Klicken Sie im Schnappschuss mit der rechten Maustaste auf die jeweilige Klasse und rufen Sie "Zeige Allokations-Stack-Traces" auf.

    
Tomas Hurka 10.09.2013, 16:13
quelle

Tags und Links