Version 1.0

lecture: Practical Java Memory Management

Java Heap leicht gemacht - wie man 10 Millionen Objekte einspart

Pjmm-logo

Die automatische Garbage Collection moderner Sprachen wie Java ist eine große Hilfe - solange alles gut verläuft. Viele Entwickler kennen aber auch die möglichen Probleme: Die Applikation stürzt ab, ist mehrere Sekunden nicht ansprechbar oder führt nach einiger Zeit permanent Garbage Collections durch. Der Schuldige ist schnell ausgemacht - der Garbage Collector. Aber dürfen wir als Programmierer und Architekten wirklich den Müllmann für den Müll verantwortlich machen?

Dieser Vortrag fokussiert auf praktischen Tipps. Was sind die verschiedenen Typen von Applikationen und Speicher-Klassen? Wann und wie lohnt es sich auf den Speicherverbrauch zu achten? Welche OpenSource-Tools und Bordmittel können dabei helfen? Wann sind "Major collections" nicht mehr normal? Wie entstehen und wie erkennt und behebt man Speicherlecks? Auch Infrastruktur-Maßnahmen wie monit können bei der Aufrechterhaltung der Service-Qualität helfen.

Am Ende steht die Frage: Kann eine echte Applikation Terabyte von Daten bearbeiten, ohne je eine Major Collection durchzuführen?

Dieser Vortrag behandelt ein klassisches Thema - das Memory Management in Java. Weniger klassisch ist der Ausrichtung, denn es wird nicht (oder kaum) der Garbage Collector behandelt. Es gibt keine Tipps zur Wahl des Collectors oder zum Tuning desselben. Vielmehr liegt der Fokus darauf, den Speicherverbrauch korrekt zu tunen, und Speicher zu sparen wenn es lohnt.

Der Vortrag ist sehr praktisch ausgerichtet. Der Zuhörer soll in die Lage versetzt werden, den eigenen Speicherverbrauch einzuschätzen. Ich stelle OpenSource Tools vor (z.B. twitter ObjectSizeCalculator), die dabei helfen. An Beispielen wird gezeigt, wie stark sich das Klassen-Design auf den Speicherverbrauch auswirkt.

Weitere Aspekte des Vortrags sind Erkennung und Behebung von Memory Leaks. Neben Bordmitteln (jcmd) wird ein brandneues (Premiere!) Tool "jcha" vorgestellt (Java Class Histogram Analyser). jcha ist erfolgreich Produktions-erprobt, und auf GitHub unter OpenSource Lizenz verfügbar (https://github.com/trivago/jcha).

Es geht auch um die Beantwortung der Frage, wie man einen Service verfügbar hält, wenn Applikations-Pausen durch Major Collections tatsächlich unvermeidbar sind.
Für eine gesamtheitliche Lösung wird auch das Umfeld um die JVM beleuchtet. Zum Beispiel wie man Tomcat-Connector einstellen kann (fail fast), oder wie Monitoring-Tools wie Monit helfen können.