Достижимость14 / 19

GC ищет достижимые объекты

Мусор — объекты, к которым программа больше не может обратиться по ссылкам.

Сборщик мусора (GC) начинает с корней и проходит по ссылкам. Найденные объекты ещё доступны программе, поэтому он их сохраняет. Память остальных объектов можно освободить.

В примере есть цепочка корень → сцена → игрок. Доступ к этим объектам есть только через показанные связи.

Кнопки заменяют ссылку значением null:

  • Сцена → игрок: игрок становится недостижимым, сцена остаётся доступна.
  • Корень → сцена: оба объекта становятся недостижимыми.

Разрыв ссылок

Кнопки на связях заменяют ссылку значением null. Начальное состояние:

globalThis.activeScene = { player: { hp: 100 } };
Корень (root)globalThis activeScene: ссылка на scene

Heap · куча

scene✓ Достижим · сохранить
player: ссылка на player
player✓ Достижим · сохранить
hp: 100
Выполненные операции · интерактивная схема
Пока ни одной.

От корня есть путь к scene и через неё — к player. Оба объекта достижимы.

Достижимы: 2 из 2

Интерактивная схема. Других ссылок на эти объекты здесь нет. Недостижимые объекты остаются на схеме: время реального освобождения памяти выбирает V8.

Основной вывод

Если от корней к объекту больше нет пути по ссылкам, GC может освободить его память. Когда это произойдёт, решает движок.

Проверить по первоисточнику ↗

V8 · Orinoco GC↗Обход ссылок от корней: достижимые объекты сохраняются, недостижимые могут быть собраны.ECMA-262 · PutValue↗Присваивание нового значения свойству объекта. Запись null заменяет ссылку, не удаляя сам объект.