Как поведет себя механизм автоматического управления памятью, если объект содержит ссылку на самого себя?

В C# механизм автоматического управления памятью (Garbage Collector, GC) основан на подсчёте достижимости объектов из корневых ссылок (roots).

Короткий ответ

Что ответить на собеседовании

В C# механизм автоматического управления памятью (Garbage Collector, GC) основан на подсчёте достижимости объектов из корневых ссылок (roots).

Подробный разбор

Ответ с пояснениями

В C# механизм автоматического управления памятью (Garbage Collector, GC) основан на подсчёте достижимости объектов из корневых ссылок (roots).

Если объект содержит ссылку на самого себя (самоссылка), это не мешает сборщику мусора освободить память, если на этот объект нет внешних достижимых ссылок. GC анализирует граф объектов, начиная с корневых ссылок, и помечает все достижимые объекты. Объекты, которые достижимы только через циклические ссылки (включая самоссылки), но не достижимы из корней, считаются недостижимыми и подлежат сборке.

Таким образом, самоссылка не препятствует сбору объекта, если он не используется в программе.

Пример:

class Node {
    public Node SelfReference;
}

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

// Если после этого node больше не используется и нет других ссылок на него,
// GC освободит память, несмотря на самоссылку.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку