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.