Java optimieren

Book description

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Leistungstuning ist eine experimentelle Wissenschaft, aber das bedeutet nicht, dass Ingenieure auf Vermutungen und Folklore zurückgreifen sollten, um die Arbeit zu erledigen. Doch genau das ist oft der Fall. In diesem praktischen Buch lernen fortgeschrittene Java-Technologen, die mit komplexen Plattformen arbeiten, wie sie Java-Cloud-Anwendungen mit einem quantitativen, überprüfbaren und wiederholbaren Ansatz auf Leistung trimmen können.

Als Reaktion auf die Allgegenwart des Cloud Computing behandelt diese überarbeitete Ausgabe Themen, die für eine hohe Leistung von Java-Anwendungen in der Cloud entscheidend sind. Viele Ressourcen zum Thema Leistung konzentrieren sich eher auf die Theorie und die Interna von virtuellen Java-Maschinen, aber dieses Buch diskutiert die technischen Aspekte auf niedriger Ebene im Kontext der praktischen Leistungsoptimierung und untersucht eine breite Palette von Aspekten. Es gibt keine einfachen Rezepte, Tipps und Tricks oder Algorithmen zu lernen. Stattdessen geht es bei der Leistungsanalyse darum, die gewünschten Ergebnisse zu definieren und zu bestimmen und mit fundiertem technischem Wissen zu ermitteln, wie diese Ziele erreicht werden können.

Mit diesem Buch wirst du:

  • lernst du, wie Java-Prinzipien und -Technologien die moderne Hardware, Betriebssysteme und Cloud-Stacks optimal nutzen
  • die Fallstricke bei der Messung von Java-Leistungszahlen und die Nachteile von Microbenchmarking untersuchen
  • Verstehen, wie man Java/JVM-Anwendungen in modernen Cloud-Umgebungen verpackt, einsetzt, betreibt und debuggt
  • Anwendung neuer Beobachtungsansätze, um ein tiefes Verständnis von Cloud Native Applications zu erlangen
  • Leistungstechniken der Java-Sprache anwenden, einschließlich nebenläufiger und verteilter Formen

Table of contents

  1. Vorwort
  2. Vorwort
    1. In diesem Buch verwendete Konventionen
    2. Code-Beispiele verwenden
    3. O'Reilly Safari
    4. Wie du uns kontaktierst
    5. Danksagungen
  3. 1. Optimierung und Leistung Definiert
    1. Java Leistung - der falsche Weg
    2. Java-Leistungsübersicht
    3. Leistung als experimentelle Wissenschaft
    4. Eine Taxonomie für Leistung
      1. Durchsatz
      2. Latenz
      3. Kapazität
      4. Inanspruchnahme
      5. Effizienz
      6. Skalierbarkeit
      7. Degradierung
      8. Verbindungen zwischen den beobachtbaren Größen
    5. Leistungsdiagramme lesen
    6. Zusammenfassung
  4. 2. Überblick über die JVM
    1. Dolmetschen und Klassenladen
    2. Ausführen von Bytecode
    3. Einführung von HotSpot
      1. Einführung der Just-in-Time-Kompilierung
    4. JVM Speicherverwaltung
    5. Threading und das Java-Speichermodell
    6. Triff die JVMs
      1. Ein Hinweis zu Lizenzen
    7. Überwachungs-Tools und Werkzeuge für die JVM
      1. VisualVM
    8. Zusammenfassung
  5. 3. Hardware und Betriebssysteme
    1. Einführung in moderne Hardware
    2. Speicher
      1. Speicher Caches
    3. Moderne Prozessoreigenschaften
      1. Übersetzung Lookaside-Puffer
      2. Verzweigungsvorhersage und spekulative Ausführung
      3. Hardware Speichermodelle
    4. Betriebssysteme
      1. Das Zeitplannungsprogramm
      2. Eine Frage der Zeit
      3. Kontext-Schalter
    5. Ein einfaches Systemmodell
    6. Grundlegende Aufdeckungsstrategien
      1. Auslastung der CPU
      2. Speicherbereinigung
      3. E/A
      4. Mechanische Sympathie
    7. Virtualisierung
    8. Die JVM und das Betriebssystem
    9. Zusammenfassung
  6. 4. Muster und Antimuster für Leistungstests
    1. Arten von Leistungstests
      1. Latenztest
      2. Durchsatztest
      3. Belastungstest
      4. Stresstest
      5. Ausdauertest
      6. Kapazitätsplanungstest
      7. Degradationstest
    2. Fibel für bewährte Methoden
      1. Top-Down Leistung
      2. Erstellen einer Testumgebung
      3. Leistungsanforderungen ermitteln
      4. Java-spezifische Probleme
      5. Leistungstests als Teil des SDLC
    3. Einführung von Performance-Antipatterns
      1. Langeweile
      2. Auffüllen des Lebenslaufs
      3. Gruppenzwang
      4. Mangelndes Verständnis
      5. Missverstandenes/nicht existierendes Problem
    4. Katalog der Antipatterns der Leistung
      1. Abgelenkt durch Glitzern
      2. Abgelenkt durch Einfach
      3. Assistent für Leistungsoptimierung
      4. Stimmung durch Folklore
      5. Der Esel der Schuld
      6. Das große Ganze übersehen
      7. UAT ist mein Schreibtisch
      8. Produktionsnahe Daten sind schwierig
    5. Kognitive Verzerrungen und Leistungstests
      1. Reduktionistisches Denken
      2. Bestätigungsvorurteil
      3. Nebel des Krieges (Action Bias)
      4. Risikovorurteile
      5. Ellsbergs Paradoxon
    6. Zusammenfassung
  7. 5. Microbenchmarking und Statistik
    1. Einführung in die Messung der Java-Leistung
    2. Einführung in JMH
      1. Mach keinen Microbenchmark, wenn du es vermeiden kannst (eine wahre Geschichte)
      2. Heuristiken für den Einsatz von Microbenchmarks
      3. Der JMH-Rahmen
      4. Ausführen von Benchmarks
    3. Statistiken für die JVM-Leistung
      1. Arten von Fehlern
      2. Nicht-normale Statistik
    4. Interpretation von Statistiken
    5. Zusammenfassung
  8. 6. Die Speicherbereinigung verstehen
    1. Wir stellen vor: Mark und Sweep
      1. Glossar zur Speicherbereinigung
    2. Einführung in die HotSpot Runtime
      1. Darstellung von Objekten zur Laufzeit
      2. GC Roots und Arenas
    3. Zuteilung und Lebenszeit
      1. Schwache Generationshypothese
    4. Speicherbereinigung im HotSpot
      1. Thread-lokale Zuweisung
      2. Hemisphärische Sammlung
    5. Die Parallelsammler
      1. Junge parallele Sammlungen
      2. Alte parallele Sammlungen
      3. Grenzen der Parallelkollektoren
    6. Die Rolle der Zuteilung
    7. Zusammenfassung
  9. 7. Erweiterte Speicherbereinigung
    1. Kompromisse und steckbare Kollektoren
    2. Konkurrierende GC-Theorie
      1. JVM-Sicherheitspunkte
      2. Dreifarbige Markierung
    3. CMS
      1. Wie CMS funktioniert
      2. Grundlegende JVM-Flags für CMS
    4. G1
      1. G1 Heap-Layout und Regionen
      2. G1 Algorithmusentwurf
      3. G1-Phasen
      4. Grundlegende JVM-Flags für G1
    5. Shenandoah
      1. Gleichzeitige Verdichtung
      2. Shenandoah erhalten
    6. C4 (Azul Zing)
      1. Die Barriere des geladenen Wertes
    7. Ausgewogen (IBM J9)
      1. J9 Objekt-Kopfzeilen
      2. Große Arrays in Balanced
      3. NUMA und Balanced
    8. Legacy HotSpot Sammler
      1. Serial und SerialOld
      2. Inkrementelles CMS (iCMS)
      3. Veraltete und entfernte GC-Kombinationen
      4. Epsilon
    9. Zusammenfassung
  10. 8. GC Logging, Überwachung, Tuning und Tools
    1. Einführung in das GC Logging
      1. Einschalten der GC-Protokollierung
      2. GC Logs versus JMX
      3. Nachteile von JMX
      4. Vorteile von GC Log-Daten
    2. Log Parsing Tools
      1. Zensum
      2. GCViewer
      3. Unterschiedliche Visualisierungen der gleichen Daten
    3. Basic GC Tuning
      1. Zuteilung verstehen
      2. Die Pausenzeit verstehen
      3. Collector Threads und GC Roots
    4. Parallele GC abstimmen
    5. CMS abstimmen
      1. Ausfälle im gleichzeitigen Modus aufgrund von Fragmentierung
    6. Stimmung G1
    7. jHiccup
    8. Zusammenfassung
  11. 9. Code-Ausführung auf der JVM
    1. Überblick über die Bytecode-Interpretation
      1. Einführung in den JVM Bytecode
      2. Einfache Dolmetscher
      3. HotSpot-spezifische Details
    2. AOT und JIT-Kompilierung
      1. AOT Kompilation
      2. JIT-Kompilierung
      3. AOT- und JIT-Kompilierung im Vergleich
    3. HotSpot JIT-Grundlagen
      1. Klass Words, Vtables und Pointer Swizzling
      2. Protokollierung JIT-Kompilierung
      3. Compiler innerhalb von HotSpot
      4. Tiered Compilation in HotSpot
    4. Der Code-Cache
      1. Fragmentierung
    5. Einfaches JIT-Tuning
    6. Zusammenfassung
  12. 10. Die JIT-Kompilierung verstehen
    1. Wir stellen vor: JITWatch
      1. Grundlegende JITWatch-Ansichten
      2. JVMs und hsdis debuggen
    2. Einführung in die JIT-Kompilierung
    3. Inlining
      1. Inlining-Grenzen
      2. Abstimmung des Inlining-Subsystems
    4. Schleife abrollen
      1. Zusammenfassung der Schleifenabwicklung
    5. Flucht-Analyse
      1. Eliminierung von Heap-Zuweisungen
      2. Analyse von Schlössern und Fluchtwegen
      3. Grenzen der Escape-Analyse
    6. Monomorphe Versendung
    7. Intrinsics
    8. On-Stack-Ersatz
    9. Safepoints Revisited
    10. Methoden der Kernbibliothek
      1. Obere Methodengrößengrenze für Inlining
      2. Obere Methodengrößengrenze für die Kompilierung
    11. Zusammenfassung
  13. 11. Leistungstechniken der Java-Sprache
    1. Sammlungen optimieren
    2. Optimierungsüberlegungen für Listen
      1. ArrayList
      2. LinkedList
      3. ArrayList versus LinkedList
    3. Optimierungsüberlegungen für Karten
      1. HashMap
      2. TreeMap
      3. Fehlen einer MultiMap
    4. Optimierungsüberlegungen für Sets
    5. Domänen-Objekte
    6. Finalisierung vermeiden
      1. Kriegsgeschichte: Vergessen, aufzuräumen
      2. Warum nicht die Finalisierung zur Lösung des Problems nutzen?
      3. Versuch-mit-Ressourcen
    7. Methode Griffe
    8. Zusammenfassung
  14. 12. Gleichzeitige Leistungstechniken
    1. Einführung in die Parallelität
      1. Grundlegende Java-Gleichzeitigkeit
    2. Das JMM verstehen
    3. Aufbau von Gleichzeitigkeitsbibliotheken
      1. Unsicher
      2. Atomics und CAS
      3. Schlösser und Spinlocks
    4. Zusammenfassung der gleichzeitigen Bibliotheken
      1. Sperren in java.util.concurrent
      2. Lesen/Schreiben Sperren
      3. Semaphoren
      4. Gleichzeitige Sammlungen
      5. Schlösser und Barrieren
    5. Executors und Aufgabenabstraktion
      1. Einführung in die asynchrone Ausführung
      2. Auswählen eines ExecutorService
      3. Gabel/Verbindung
    6. Moderne Java-Gleichzeitigkeit
      1. Streams und parallele Streams
      2. Lock-Free-Techniken
      3. Akteur-basierte Techniken
    7. Zusammenfassung
  15. 13. Profiling
    1. Einführung in das Profiling
    2. Stichproben und Safepointing Bias
    3. Execution Profiling Tools für Entwickler
      1. VisualVM Profiler
      2. JProfiler
      3. YourKit
      4. Flugschreiber und Missionskontrolle
      5. Operative Werkzeuge
    4. Moderne Profiler
    5. Allokationsprofilierung
    6. Heap Dump Analyse
      1. hprof
    7. Zusammenfassung
  16. 14. Leistungsstarke Protokollierung und Nachrichtenübermittlung
    1. Loggen
      1. Microbenchmarks protokollieren
    2. Entwicklung eines umweltfreundlicheren Loggers
    3. Niedrige Latenzzeit mit Real Logic Libraries
      1. Agrona
      2. Einfache Binärkodierung
      3. Aeron
      4. Das Design von Aeron
    4. Zusammenfassung
  17. 15. Java 9 und die Zukunft
    1. Kleine Leistungsverbesserungen in Java 9
      1. Segmentierter Code-Cache
      2. Kompakte Saiten
      3. Neue String-Verkettung
      4. C2 Compiler-Verbesserungen
      5. Neue Version von G1
    2. Java 10 und zukünftige Versionen
      1. Neuer Freigabeprozess
      2. Java 10
    3. Unsicher in Java 9 und darüber hinaus
      1. VarHandles in Java 9
    4. Projekt Walhalla und Wertetypen
    5. Graal und Trüffel
    6. Zukünftige Wege im Bytecode
    7. Zukünftige Richtungen der Gleichzeitigkeit
    8. Fazit
  18. Index

Product information

  • Title: Java optimieren
  • Author(s): Benjamin J Evans, James Gough, Chris Newland
  • Release date: September 2024
  • Publisher(s): O'Reilly Media, Inc.
  • ISBN: 9781098196783