Sobes.tech
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.