Ich profiliere meine Java-Anwendung mit VisualVM und ich habe
durchgemachtprofiling_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.
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.