Garbage collection & Just-In-Time (JIT)-compilatie

Code optimaliseren in Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Garbage collection - de basis

Handmatig geheugbeheer (C/C++)

  • Programmeur reserveert & bevrijdt geheugen expliciet
  • Gevoelig voor leaks

$$

Java's Garbage Collection

  • Automatische geheugenallocatie
  • Automatische detectie van ongebruikte objecten
  • Automatische geheugenterugwinning
Code optimaliseren in Java

Hoe garbage collection werkt

  • Mark: identificeer bereikbare objecten vanaf roots
  • Sweep: verwijder onbereikbare objecten

Screenshot 2025-05-11 at 6.58.38 PM.png

Code optimaliseren in Java

Garbage collection en performance

GC-prestatieafwegingen

  • Maakt ontwikkeling eenvoudiger, maar heeft performance-impact

$$

GC-algoritmen

  • Moderne JVM's bieden meerdere garbage-collection-algoritmen
  • De keuze hangt af van de applicatie-eisen
  • Een diepgaande gids over GC-algoritmen vind je hier
1 https://www.baeldung.com/jvm-garbage-collectors
Code optimaliseren in Java

GC-impact op performance

// Slecht - Veel kortlevende objecten maken
for (int i = 0; i < 1000000; i++) {
    new Object(); // Wordt meteen garbage
}


// vs. Objecten hergebruiken Object obj; for (int i = 0; i < 1000000; i++) { obj = new Object(); // Slechts één referentie }
Code optimaliseren in Java

GC-vriendelijke code

// Vermijd dit in performance-kritieke code
String result = "";
for (int i = 0; i < 100000; i++) {
    result += i; // Maakt elke keer een nieuwe String
}


// Betere aanpak StringBuilder builder = new StringBuilder(); for (int i = 0; i < 100000; i++) { builder.append(i); // Hergebruikt dezelfde buffer } String result = builder.toString();
Code optimaliseren in Java

Just-In-Time-compilatie

  • JVM-uitvoeringsproces:
    • Java-bron -> Bytecode
    • Bytecode -> Geïnterpreteerde uitvoering
    • Heetste methods -> Native machinecode
  • Optimaliseert vaak uitgevoerde code
Code optimaliseren in Java

JIT-vriendelijke patronen

  • Schrijf voorspelbare code
// Voorspelbare branches helpen JIT-optimalisatie
if (value > 0) {
    // Code A - vaak genomen pad
} else {
    // Code B - zelden genomen pad
}
  • Maak gefocuste, kleine methods
  • Kleine, vaak aangeroepen methods zijn ideaal voor inlining
  • Complexe code wordt minder effectief geoptimaliseerd
Code optimaliseren in Java

Samenvatting

  • Minimaliseer objectcreatie in performance-kritieke paden
  • Schrijf voorspelbare code die past bij JIT-mogelijkheden
  • Optimaliseer wat ertoe doet: profileer eerst
Code optimaliseren in Java

Laten we oefenen!

Code optimaliseren in Java

Preparing Video For Download...