Что такое garbage collection?
Сборка мусора в JavaScript представляет собой механизм автоматического управления памятью. Он полностью избавляет программиста от необходимости вручную выделять и освобождать байты в оперативной памяти, как это делается в низкоуровневых языках вроде C или C++.
Главным алгоритмом, используемым современными движками для этих целей, является алгоритм под названием Mark-and-sweep, что в переводе означает «пометка и очистка». Этот процесс работает циклически в фоновом режиме.
Сборщик мусора начинает обход графа объектов от корневых элементов, таких как объект глобальной области видимости window или global, и помечает все доступные и достижимые объекты как активные и нужные. Все те сущности, до которых невозможно дойти по цепочке ссылок от корней, считаются устаревшими и удаляются из памяти.
Для тонкой настройки работы с памятью и предотвращения утечек в сложных приложениях разработчики используют специальные структуры данных, такие как WeakMap и WeakSet. Они хранят слабые ссылки на объекты, что позволяет гибко управлять жизненным циклом данных.
Если на объект в WeakMap больше нет других сильных ссылок в коде, он автоматически удаляется сборщиком мусора, даже несмотря на то, что он присутствует в этой карте. Важно понимать, что этот процесс полностью автоматизирован, и программист не может принудительно запустить его вручную из кода скрипта, хотя некоторые среды выполнения и предоставляют скрытые флаги для отладки.