Garbage Collection & Just-In-Time (JIT) Compilation

Codeoptimierung in Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Garbage Collection – Grundlagen

Manuelles Speichermanagement (C/C++)

  • Programmierer:in weist Speicher zu und gibt ihn frei
  • Anfällig für Lecks

$$

Javas Garbage Collection

  • Automatische Speicherzuweisung
  • Automatisches Erkennen ungenutzter Objekte
  • Automatisches Freigeben von Speicher
Codeoptimierung in Java

So funktioniert Garbage Collection

  • Mark: Erreichbare Objekte von den Roots aus markieren
  • Sweep: Unerreichbare Objekte entfernen

Screenshot 2025-05-11 at 6.58.38 PM.png

Codeoptimierung in Java

Garbage Collection und Performance

GC: Performance-Abwägungen

  • Vereinfacht die Entwicklung, hat aber Performance-Kosten

$$

GC-Algorithmen

  • Moderne JVMs bieten mehrere Garbage-Collection-Algorithmen
  • Die Wahl hängt von den Anforderungen der Anwendung ab
  • Eine ausführliche Anleitung zu GC-Algorithmen findest du hier
1 https://www.baeldung.com/jvm-garbage-collectors
Codeoptimierung in Java

Auswirkungen auf die GC-Performance

// Schlecht – viele kurzlebige Objekte erzeugen
for (int i = 0; i < 1000000; i++) {
    new Object(); // Wird sofort zu Garbage
}


// vs. Objekte wiederverwenden Object obj; for (int i = 0; i < 1000000; i++) { obj = new Object(); // Nur eine Referenz }
Codeoptimierung in Java

GC-freundliches Coding

// In performancekritischem Code vermeiden
String result = "";
for (int i = 0; i < 100000; i++) {
    result += i; // Erstellt jedes Mal ein neues String-Objekt
}


// Besserer Ansatz StringBuilder builder = new StringBuilder(); for (int i = 0; i < 100000; i++) { builder.append(i); // Nutzt denselben Puffer } String result = builder.toString();
Codeoptimierung in Java

Just-In-Time-Kompilierung

  • JVM-Ausführungsprozess:
    • Java-Quelltext -> Bytecode
    • Bytecode -> Interpretierte Ausführung
    • Heiße Methoden -> Nativer Maschinencode
  • Optimiert häufig ausgeführten Code
Codeoptimierung in Java

JIT-freundliche Muster

  • Schreib vorhersagbaren Code
// Vorhersagbare Verzweigungen helfen der JIT-Optimierung
if (value > 0) {
    // Code A – häufig genommener Pfad
} else {
    // Code B – seltener Pfad
}
  • Erstelle fokussierte, kleinere Methoden
  • Kleine, oft aufgerufene Methoden sind ideal fürs Inlining
  • Komplexer Code wird oft weniger effektiv optimiert
Codeoptimierung in Java

Zusammenfassung

  • Minimiere Objekterzeugung in performancekritischen Pfaden
  • Schreib vorhersagbaren Code, der zu JIT-Optimierungen passt
  • Optimiere gezielt das, was zählt – nach vorherigem Profiling
Codeoptimierung in Java

Lass uns üben!

Codeoptimierung in Java

Preparing Video For Download...