Colectarea gunoiului & compilarea Just-In-Time (JIT)

Optimizarea codului în Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Colectarea gunoiului - noțiuni de bază

Gestionarea manuală a memoriei (C/C++)

  • Programatorul alocă și eliberează memoria explicit
  • Predispus la scurgeri de memorie

$$

Colectarea gunoiului în Java

  • Alocare automată a memoriei
  • Detectare automată a obiectelor neutilizate
  • Recuperare automată a memoriei
Optimizarea codului în Java

Cum funcționează colectarea gunoiului

  • Marcare: Identificarea obiectelor accesibile din rădăcini
  • Curățare: Eliminarea obiectelor inaccesibile

Captură de ecran cu diagrama colectării gunoiului

Optimizarea codului în Java

Colectarea gunoiului și performanța

Compromisuri de performanță ale GC

  • Simplifică dezvoltarea, dar implică considerații de performanță

$$

Algoritmi GC

  • JVM-urile moderne oferă mai mulți algoritmi de colectare a gunoiului
  • Alegerea depinde de cerințele aplicației
  • Un ghid detaliat despre algoritmii GC poate fi găsit aici
1 https://www.baeldung.com/jvm-garbage-collectors
Optimizarea codului în Java

Impactul GC asupra performanței

// 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 }
Optimizarea codului în Java

Cod prietenos cu 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();
Optimizarea codului în Java

Compilarea Just-In-Time

  • Procesul de execuție JVM:
    • Sursă Java -> Bytecode
    • Bytecode -> Execuție interpretată
    • Metode frecvente -> Cod mașină nativ
  • Optimizează codul executat frecvent
Optimizarea codului în Java

Tipare de cod prietenoase cu JIT

  • Scrieți cod previzibil
// Predictable branches help JIT optimization
if (value > 0) {
    // Code A - frequently taken path
} else {
    // Code B - rarely taken path
}
  • Creați metode mici și focalizate
  • Metodele mici, apelate frecvent, sunt ideale pentru inlining
  • Codul complex poate fi optimizat mai puțin eficient
Optimizarea codului în Java

Rezumat

  • Minimizați crearea de obiecte în căile critice de performanță
  • Scrieți cod previzibil, aliniat cu capacitățile de optimizare JIT
  • Concentrați optimizarea pe codul relevant, folosind mai întâi profilarea
Optimizarea codului în Java

Să exersăm!

Optimizarea codului în Java

Preparing Video For Download...