Garbage collection a kompilace Just-In-Time (JIT)

Optimalizace kódu v Javě

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Garbage collection – základy

Ruční správa paměti (C/C++)

  • Programátor explicitně alokuje a uvolňuje paměť
  • Náchylné k únikům paměti

$$

Garbage collection v Javě

  • Automatická alokace paměti
  • Automatická detekce nepoužívaných objektů
  • Automatické uvolňování paměti
Optimalizace kódu v Javě

Jak funguje garbage collection

  • Označení: Identifikace dosažitelných objektů z kořenů
  • Zametení: Odstranění nedosažitelných objektů

Snímek obrazovky znázorňující proces označení a zametení při garbage collection

Optimalizace kódu v Javě

Garbage collection a výkon

Výkonnostní kompromisy GC

  • Zjednodušuje vývoj, ale přináší výkonnostní nároky

$$

Algoritmy GC

  • Moderní JVM nabízejí několik algoritmů garbage collection
  • Volba závisí na požadavcích aplikace
  • Podrobný průvodce algoritmy GC naleznete zde
1 https://www.baeldung.com/jvm-garbage-collectors
Optimalizace kódu v Javě

Dopad GC na výkon

// Bad - Creating many short-lived objects
for (int i = 0; i < 1000000; i++) {
    new Object(); // Immediately becomes garbage
}


// vs. Reusing objects Object obj; for (int i = 0; i < 1000000; i++) { obj = new Object(); // Only one reference }
Optimalizace kódu v Javě

Kód šetrný k GC

// Avoid this in performance-critical code
String result = "";
for (int i = 0; i < 100000; i++) {
    result += i; // Creates a new String each time
}


// Better approach StringBuilder builder = new StringBuilder(); for (int i = 0; i < 100000; i++) { builder.append(i); // Reuses the same buffer } String result = builder.toString();
Optimalizace kódu v Javě

Kompilace Just-In-Time

  • Proces provádění JVM:
    • Zdrojový kód Java -> Bytekód
    • Bytekód -> Interpretované provádění
    • Frekventované metody -> Nativní strojový kód
  • Optimalizuje často prováděný kód
Optimalizace kódu v Javě

Vzory kódu přívětivé pro JIT

  • Pište předvídatelný kód
// Predictable branches help JIT optimization
if (value > 0) {
    // Code A - frequently taken path
} else {
    // Code B - rarely taken path
}
  • Vytvářejte malé, soustředěné metody
  • Malé, často volané metody jsou ideálními kandidáty pro inlining
  • Složitý kód může být optimalizován méně efektivně
Optimalizace kódu v Javě

Shrnutí

  • Minimalizujte vytváření objektů ve výkonnostně kritických cestách
  • Pište předvídatelný kód odpovídající možnostem JIT optimalizace
  • Optimalizujte skutečně důležitý kód – nejprve proveďte profilování
Optimalizace kódu v Javě

Lass uns üben!

Optimalizace kódu v Javě

Preparing Video For Download...