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.