Architektura paměti JVM

Optimalizace kódu v Javě

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Co je JVM?

  • Prostředí pro spouštění kódu nezávislé na platformě
  • Převádí bytekód (.class) na strojový kód
  • Správa paměti a garbage collection
  • Kompilace Just-In-Time
Optimalizace kódu v Javě

Přehled architektury paměti JVM

Architektura paměti JVM

Optimalizace kódu v Javě

Zásobník (Stack)

  • Oblast paměti pro provádění metod a lokální proměnné
  • Struktura LIFO (poslední dovnitř, první ven)
  • Ukládá:
    • Lokální proměnné
    • Primitivní datové typy
    • Informace o volání metod
  • StackOverflowError při překročení velikosti
Optimalizace kódu v Javě

Halda (Heap)

  • Ukládá všechny objekty a pole
  • new vytvoří objekt a alokuje ho na haldě
  • Spravováno garbage collectorem
  • Dynamická velikost
  • Rozdělena do generací
Optimalizace kódu v Javě

Paměť v praxi

public void processData() {
    int count = 0;                  // Stack

String name = "Java"; // Heap
List<String> items = // Reference on Stack new ArrayList<>(); // Object on Heap
items.add(new String("Item")); // Object on Heap }
Optimalizace kódu v Javě

Paměťově efektivní vzory kódování

// Inefficient
List<String> list1 = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
    String s = new String("value"); // 1000 objects
    list1.add(s);
}

// Better
List<String> list2 = new ArrayList<>();
String s = "value";  // Single object
for (int i = 0; i < 1000; i++) {
    list2.add(s);
}
Optimalizace kódu v Javě

Shrnutí

  • JVM spravuje paměť především prostřednictvím zásobníku a haldy
  • Zásobník -> rychlý, ukládá primitivní typy a reference
  • Halda -> ukládá objekty
Optimalizace kódu v Javě

Pojďme si procvičit!

Optimalizace kódu v Javě

Preparing Video For Download...