Как определяется срок существования объектов в управляемой памяти heap?

В Go срок существования объектов в управляемой куче (heap) определяется временем жизни ссылок на эти объекты.

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

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

В Go срок существования объектов в управляемой куче (heap) определяется временем жизни ссылок на эти объекты. Если на объект в куче существуют активные ссылки (переменные, указатели), сборщик мусора (GC) считает объект живым и не удаляет его. Как только все ссылки на объект исчезают (объект становится недостижимым), GC помечает его для удаления.

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

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

В Go срок существования объектов в управляемой куче (heap) определяется временем жизни ссылок на эти объекты. Если на объект в куче существуют активные ссылки (переменные, указатели), сборщик мусора (GC) считает объект живым и не удаляет его. Как только все ссылки на объект исчезают (объект становится недостижимым), GC помечает его для удаления.

Go использует три поколения сборки мусора с алгоритмом трассировки достижимости: начиная с корневых объектов (стек, глобальные переменные), он помечает все достижимые объекты, остальные считаются мусором.

Пример:

func f() {
    p := new(int) // объект в куче
    *p = 42
    // p существует, объект жив
}
// после выхода из f() объект становится недостижимым и будет удалён GC

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее