(In German) Presentation held at the Provinzial Rheinland Community Day in Düsseldorf on December 10 and 17, 2013. Apart from the slides, the presentation featured a demo of Eclipse MAT.
− Gib deren Speicherplatz frei − Verschiedene JVMs und GC-Algorithmen verwenden unterschiedliche Aufteilungen des Heaps und Laufzeitstrategien − Generationen oder Regionen? − Separate Method Area oder ein großer Heap? − Stop-the-world oder nebenläufig? − Sequentiell oder parallel? − etc. − Daraus resultieren wiederum verschiedene Tuning-Möglichkeiten
bzw. basierend auf Snapshots − Exzessive Objektallokation − Analyse idealerweise „online“, um bereits entfernte Objekte aufzuzeichnen − Thread-Deadlocks − Automatische Erkennung auf Thread-Dumps − CPU-Überlastung, „JVM reagiert nicht mehr“ − Analyse von Thread-Dumps kombiniert mit OS-Metriken
− Format variiert je nach JVM-Hersteller − Enthält eine Momentaufnahme verschiedener Komponenten − Objekte, Referenzen, GC Roots, Thread Stacks, etc. − Inhalt des Dumps ist unabhängig vom verwendetem GC-Algorithmus − Analyse − In der Regel durch GUI-Tools mit „bequemen“ Analyse-/Abfragemöglichkeiten − Je nach Analyse-Tool können ggf. nicht alle Formate gelesen werden
size − Beinhaltet die Größe aller Felder des Objekts (primitive Datentypen und Referenzen) − Deep size − Beinhaltet die Shallow size des Objekts und die Deep size (rekursiv) aller Felder des Objekts, die Referenzen sind − Retained size − Beinhaltet die Shallow size des Objekts und die Shallow size aller Objekte, die unerreichbar werden, falls dieses Objekt unerreichbar wird − Entspricht dem Speicher, der freigegeben wird, falls dieses Objekt GC‘d wird
verschiedene Heap-Dump-Formate lesen − Sehr umfangreiche Analysemöglichkeiten − Erweiterung für Dumps von IBM JVMs: − „IBM Monitoring and Diagnostic Tools for Java“ − http://www.ibm.com/developerworks/java/jdk/tools/memoryanalyzer/ − Auch enthalten im IBM Support Assistant
TestObject.class Klassen- Daten Weitere Klassen und deren Daten Method Area Heap Höherer Classloader LibObject LibObject.class Klassen- Daten Weitere Klassen und deren Daten „oben“ „unten“ − Redeployment einer Web-Applikation, Neuladen der Klasse TestObject.class − Eine LibObject-Instanz „von oben“ Classloader referenziert eine TestObject-Instanz − LibObject.class wird nicht neu geladen, so dass die Referenz bestehen bleibt
„Memory Leak Detection/Prevention“ − Erkennt/behebt häufige Ursachen für Classloader Leaks, z.B. − Starten aber kein Stoppen eigener Threads in Web-Anwendungen (z.B. Timer) − Nutzung von ThreadLocals ohne Cleanup − Keine Deregistrierung von registrierten Objekten (Logger, JDBC Driver, …) − Unerwartete Leaks bei Nutzung von Standard- /Fremdbibliotheken − Weitere Programmierfehler