Sobes.tech
Junior — Middle

Ako objekt obsahuje odkaz na seba, ako sa bude správať mechanizmus automatického riadenia pamäti?

sobes.tech AI

Odpoveď od AI

V C# mechanizmus automatického riadenia pamäte (Garbage Collector, GC) je založený na počítaní dostupnosti objektov z koreňových odkazov.

Ak objekt obsahuje odkaz na seba samého (auto-odkaz), nebráni to zbieracovi odpadkov, aby uvoľnil pamäť, ak na tento objekt nie sú žiadne externé odkazy. GC analyzuje graf objektov, začínajúc od koreňových odkazov, a označuje všetky dostupné objekty. Objekty, ktoré sú dostupné iba cez cyklické odkazy (vrátane auto-odkazov), ale nie sú dostupné z koreňov, sú považované za nedostupné a sú zbierané.

Preto auto-odkaz nebráni zbieraniu objektu, ak sa v programe nepoužíva.

Príklad:

class Node {
    public Node SelfReference;
}

var node = new Node();
node.SelfReference = node;

// Ak po tom už nie je node používaný a nemá iné odkazy,
// GC uvoľní pamäť, napriek auto-odkazu.