Optimizing Java: Praktischer Leitfaden zur Optimierung der Leistung von Java-Anwendungen
Optimizing Java: Praktischer Leitfaden zur Optimierung der Leistung von Java-Anwendungen
Zusammenfassung:
Einleitung
Das Buch „Optimizing Java“ (Autoren: Benjamin J. Evans, James Gough, Chris Newland, 2018, 450 Seiten) ist kein weiteres Nachschlagewerk zur Syntax der Sprache, sondern ein tiefgehender praktischer Leitfaden zur Maximierung der Leistung von Java-Anwendungen. Im Zeitalter von Microservices, hohen Lasten und Cloud Computing wird die Fähigkeit, Geschwindigkeit aus der JVM herauszuholen, zu einer kritischen Fähigkeit für Senior-Entwickler. Die Autoren – anerkannte Experten auf dem Gebiet der JVM und Leistung – bieten einen systematischen Ansatz: vom Verständnis der Funktionsweise der virtuellen Maschine bis hin zu konkreten Methoden der Profilierung und Code-Optimierung.
Worum geht es in diesem Buch?
Das Buch deckt den gesamten Zyklus der Leistungsarbeit ab: Theorie, Werkzeuge und praktische Techniken. Es lehrt nicht, „schönen“ Code zu schreiben, sondern schnellen und vorhersagbaren Code zu schreiben, indem man versteht, was „unter der Haube“ der JVM passiert.
Hauptthemen:
- Hardware und Betriebssystem: Wie Prozessor, Cache-Speicher, NUMA-Architektur und Betriebssystem die Leistung von Java-Anwendungen beeinflussen.
- Interna der JVM: Detaillierte Analyse der Funktionsweise des Garbage Collectors (G1, ZGC, Shenandoah), des JIT-Compilers (C1, C2, Graal), des Heap-Speichers und des Stacks.
- Profilierung und Benchmarking: Praktische Nutzung von JMH, VisualVM, Java Flight Recorder, async-profiler und anderen Tools.
- Code-Optimierung: Arbeit mit Collections, Strings, Exceptions, Synchronisation, I/O und Serialisierung.
- JVM-Konfiguration: Start-Flags, GC-Auswahl, Heap-Größen, Metaspace, Konfiguration für Container (Docker).
- Fortgeschrittene Themen: JIT-Beobachtungen, Inline-Caches, Deoptimierung, Arbeit mit nativem Code über JNI und Panama.
Für wen ist dieses Buch?
Das Buch richtet sich an erfahrene Java-Entwickler (Middle/Senior), die bereits sicher Code schreiben, aber verstehen möchten, warum eine Anwendung schnell läuft und eine andere langsam ist, und wie man das behebt. Grundkenntnisse in Java sind erforderlich, aber tiefgehende Erfahrung mit der JVM ist nicht nötig – die Autoren erklären komplexe Konzepte verständlich und mit Beispielen.
Was lernt der Leser?
- Wie JIT-Kompilierung funktioniert und wie man dem Compiler den richtigen Weg „zeigt“.
- Wie man den Garbage Collector für eine bestimmte Last auswählt und konfiguriert (Latenz vs. Durchsatz).
- Wie man Mikro-Benchmarks mit JMH korrekt schreibt, um keine falschen Ergebnisse zu erhalten.
- Wie man eine Anwendung in der Produktion mit minimalem Overhead profiliert (JFR, async-profiler).
- Wie man die Speichernutzung optimiert: Lecks vermeiden, die Anzahl der Objekte reduzieren, Off-Heap nutzen.
- Wie man die JVM für Container (Docker, Kubernetes) unter Berücksichtigung von CPU- und Speicherbeschränkungen konfiguriert.
- Wie man moderne Java-Funktionen (Module, Records, Sealed Classes) zur Leistungssteigerung nutzt.
Stärken des Buches
- Praktische Ausrichtung: Jedes Kapitel enthält Codebeispiele, Screenshots von Profilern und konkrete Empfehlungen.
- Aktualität: Trotz des Jahres 2018 deckt das Buch Java 11 und neuere Versionen (einschließlich ZGC) sowie moderne Tools ab.
- Tiefe: Die Autoren scheuen sich nicht, in die Tiefen der JVM einzutauchen, tun dies aber konsequent und ohne übermäßigen Akademismus.
- Struktur: Das Material ist logisch vom Einfachen zum Komplexen aufgebaut, sodass das Buch sowohl als Lehrbuch als auch als Nachschlagewerk genutzt werden kann.
- Erfahrung der Autoren: Evans, Gough und Newland sind bekannte Redner auf Java-Konferenzen, ihre Ratschläge sind in realen Projekten erprobt.
Empfehlung
Das Buch ist für alle nützlich, die auf Production-Ebene mit Java arbeiten: Backend-Entwickler, DevOps-Ingenieure, Architekten, Teamleiter. Wenn Sie jemals auf Leistungsprobleme gestoßen sind (lange GC-Pausen, langsamer Start, hoher Speicherverbrauch)
Empfehlungen
JavaScript (Node.js) und Datenbanken: Ein praktischer Leitfaden
Sicherheit von C# (.NET)-Anwendungen: Schutz von Code und Daten vor Angriffen
Professionelles JavaScript (Node.js): fortgeschrittene Techniken
Go (Golang) und Docker: Containerisierung von Anwendungen
Sicherheit von Swift (iOS/macOS)-Apps: Von der Schwachstelle zum Schutz
Rustonomicon