Sobes.tech
Middle

Kde jsou uloženy referenční typy a co se s nimi děje během běhu aplikace?

sobes.tech AI

Odpověď od AI

Referenční typy jsou uloženy na haldě (Heap).

Během běhu aplikace k tomu dochází:

  1. Vytvoření: Při vytváření objektu referenčního typu (například new MyClass()) je paměť pro tento objekt přidělena na haldě. Proměnná, která ho obsahuje, obsahuje odkaz na tuto část paměti.
  2. Přístup: Přístup k polím a metodám objektu se provádí přes tento odkaz.
  3. Sběr odpadu (Garbage Collection): Když objekt již není dostupný z žádné aktivní části programu (na něj nejsou žádné odkazy), může sběrač odpadu uvolnit paměť, kterou zabírá na haldě. Tento proces probíhá automaticky "na pozadí" a nevyžaduje explicitní zásah vývojáře. Sběrač odpadu periodicky prohledává haldu, nachází nedosažitelné objekty a vrací jejich paměť systému.
  4. Změna: Obsah objektu na haldě může být měněn. Pokud na stejný objekt odkazuje více referenčních proměnných, změny jeho stavu jsou viditelné přes ostatní.
  5. Přepsání odkazu: Referenční proměnná může být přepsána tak, aby odkazovala na jiný objekt nebo na null.

Příklad:

// Vytvoření objektu String (řetězce - referenční typ) na haldě
String myString = "Hello";

// Proměnná myString_2 odkazuje na stejný objekt
String myString_2 = myString;

// Vytvoření nového objektu String na haldě a přepsání odkazu
myString = "World";

// Nyní myString odkazuje na jiný objekt, zatímco myString_2 odkazuje na starý