Sobes.tech
Junior — Middle

Como é que o mecanismo de gestão automática de memória se comportará se um objeto contiver uma referência a si próprio?

sobes.tech IA

Resposta da IA

Em C#, o mecanismo de gestão automática de memória (Garbage Collector, GC) baseia-se na contagem de acessibilidade dos objetos a partir das referências raízes.

Se um objeto contém uma referência a si próprio (auto-referência), isso não impede o coletor de lixo de libertar a memória se não houver referências externas a esse objeto. O GC analisa o grafo de objetos, começando pelas referências raízes, e marca todos os objetos acessíveis. Os objetos acessíveis apenas através de referências cíclicas (incluindo auto-referências), mas não acessíveis a partir das raízes, são considerados inacessíveis e são recolhidos.

Assim, a auto-referência não impede a recolha do objeto se ele não for utilizado no programa.

Exemplo:

class Node {
    public Node SelfReference;
}

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

// Se após isto, o node deixar de ser utilizado e não houver outras referências a ele,
// o GC libertará a memória, apesar da auto-referência.