Skräpinsamling & Just-In-Time (JIT)-kompilering

Optimera kod i Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Skräpinsamling – grunderna

Manuell minneshantering (C/C++)

  • Programmeraren allokerar och frigör minne explicit
  • Riskerar minnesläckor

$$

Javas skräpinsamling

  • Automatisk minnesallokering
  • Automatisk identifiering av oanvända objekt
  • Automatisk minnesfrigörning
Optimera kod i Java

Hur skräpinsamling fungerar

  • Markera: Identifiera nåbara objekt från rötterna
  • Sopa: Ta bort onåbara objekt

Skärmdump 2025-05-11 kl. 6.58.38 PM.png

Optimera kod i Java

Skräpinsamling och prestanda

Prestandaavvägningar med GC

  • Förenklar utvecklingen, men innebär prestandaöverväganden

$$

GC-algoritmer

  • Moderna JVM:er erbjuder flera skräpinsamlingsalgoritmer
  • Valet beror på programmets krav
  • En fördjupningsguide om GC-algoritmer finns här
1 https://www.baeldung.com/jvm-garbage-collectors
Optimera kod i Java

GC:s påverkan på prestanda

// 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 }
Optimera kod i Java

GC-vänlig kodning

// 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();
Optimera kod i Java

Just-In-Time-kompilering

  • JVM:ens exekveringsprocess:
    • Java-källkod -> Bytekod
    • Bytekod -> Tolkad exekvering
    • Heta metoder -> Nativ maskinkod
  • Optimerar ofta exekverad kod
Optimera kod i Java

JIT-vänliga kodmönster

  • Skriv förutsägbar kod
// Predictable branches help JIT optimization
if (value > 0) {
    // Code A - frequently taken path
} else {
    // Code B - rarely taken path
}
  • Skriv fokuserade, mindre metoder
  • Små, ofta anropade metoder lämpar sig väl för inlining
  • Komplex kod kan optimeras mindre effektivt
Optimera kod i Java

Sammanfattning

  • Minimera objektskapande i prestandakritiska delar
  • Skriv förutsägbar kod som passar JIT-optimeringen
  • Fokusera optimeringen på det som verkligen spelar roll – profilera först
Optimera kod i Java

Nu kör vi en övning!

Optimera kod i Java

Preparing Video For Download...