Architektura pamięci JVM

Optymalizacja kodu w Javie

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Czym jest JVM?

  • Środowisko wykonawcze niezależne od platformy
  • Konwertuje bytecode (.class) na kod maszynowy
  • Zarządzanie pamięcią i odśmiecanie
  • Kompilacja Just-In-Time
Optymalizacja kodu w Javie

Przegląd architektury pamięci JVM

Architektura pamięci JVM

Optymalizacja kodu w Javie

Pamięć stosu

  • Obszar pamięci dla wykonywania metod i zmiennych lokalnych
  • Struktura LIFO (ostatni na wejściu, pierwszy na wyjściu)
  • Przechowuje:
    • Zmienne lokalne
    • Typy proste
    • Informacje o wywołaniach metod
  • StackOverflowError po przekroczeniu rozmiaru
Optymalizacja kodu w Javie

Pamięć sterty

  • Przechowuje wszystkie obiekty i tablice
  • new tworzy obiekt i alokuje go na stercie
  • Zarządzana przez odśmiecacz pamięci
  • Dynamiczny rozmiar
  • Podzielona na generacje
Optymalizacja kodu w Javie

Pamięć w działaniu

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 }
Optymalizacja kodu w Javie

Wzorce efektywnego wykorzystania pamięci

// 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);
}
Optymalizacja kodu w Javie

Podsumowanie

  • JVM zarządza pamięcią głównie przez stos i stertę
  • Pamięć stosu -> szybka, przechowuje typy proste i referencje
  • Pamięć sterty -> przechowuje obiekty
Optymalizacja kodu w Javie

Czas na ćwiczenia!

Optymalizacja kodu w Javie

Preparing Video For Download...