Junior — Middle
Kako će se ponašati mehanizam automatskog upravljanja memorijom ako objekat sadrži referencu na sebe?
sobes.tech АИ
Одговор од АИ
U C#-u, mehanizam automatskog upravljanja memorijom (Garbage Collector, GC) zasniva se na brojanju dostupnosti objekata iz korenskih referenci.
Ako objekat sadrži referencu na sebe (auto-referencu), to ne sprečava sakupljač smeća da oslobodi memoriju ako na taj objekat nema spoljašnjih referenci. GC analizira graf objekata, počevši od korenskih referenci, i označava sve dostupne objekte. Objekti koji su dostupni samo putem cikličnih referenci (uključujući auto-referencije), ali nisu dostupni iz korena, smatraju se nedostupnim i biće sakupljeni.
Dakle, auto-referencija ne sprečava sakupljanje objekta ako se ne koristi u programu.
Primer:
class Node {
public Node SelfReference;
}
var node = new Node();
node.SelfReference = node;
// Ako nakon toga, node više nije u upotrebi i nema drugih referenci na njega,
// GC će osloboditi memoriju, uprkos auto-referenciji.