Sobes.tech
Junior — Middle

Vysvětlete hlavní rozdíly mezi oblastí paměti Stack a Heap ve virtuální stroj Java

sobes.tech AI

Odpověď od AI

Virtuální stroj Java rozděluje paměť do dvou hlavních oblastí: zásobník (Stack) a halda (Heap).

  • Stack (zásobník) — je oblast paměti, kde jsou uloženy místní proměnné metod a informace o volání funkcí (zásobníkové rámce). Každý vlákno má svůj vlastní zásobník. Přístup k datům na zásobníku je velmi rychlý, paměť je přiřazena a uvolněna automaticky při vstupu a výstupu z metod. Na zásobníku jsou uloženy primitivní typy a odkazy na objekty.

  • Heap (halda) — je oblast paměti, kde jsou umístěny objekty a pole, které jsou dynamicky vytvářeny pomocí operátoru new. Halda je sdílená všemi vlákny a správa paměti zde je zajišťována garbage collectorem (garbage collector). Objekty na haldě žijí tak dlouho, dokud na ně existují odkazy.

Stručně:

  • Stack: rychlý přístup, ukládá místní proměnné a volání metod, je omezené velikostí.
  • Heap: ukládá objekty, je spravován garbage collectorem, obvykle větší a dynamický.

Příklad:

public void priklad() {
    int a = 10; // proměnná a je uložena na zásobníku
    MyObject obj = new MyObject(); // odkaz obj na zásobníku, objekt na haldě
}