Когда код JavaScript считается мусором для GC - PullRequest
2 голосов
/ 20 сентября 2019

Итак, я изучаю более продвинутые части JavaScript.Прямо сейчас я изучаю память, утечки памяти и сбор мусора.Многие примеры в Интернете просто объясняют, что такое сборщик мусора, но у меня возникают проблемы с поиском такого, который сообщает мне, когда код считается мусором для сборщика мусора.

До сих пор я читал «Когда нетдлинная ссылка, указывающая на объект ".Это единственный случай?Что именно они подразумевают под этим.

Заранее спасибо.

1 Ответ

1 голос
/ 20 сентября 2019

Лучше видеть его как код, достижимый или недоступный из корней, а корни - это значения, которые по своей природе всегда достижимы, такие как глобальные переменные.Сборщик мусора в JS использует алгоритм «пометки и очистки», где он начинается с корней и посещает каждую ссылку, их ссылки и так далее.После посещения он помечается как посещаемый / достижимый вместе со всеми доступными ссылками оттуда и больше не будет посещаться.

У вас могут быть ссылки, указывающие на объекты, которые также могут иметь ссылки на другие объекты,но как только они больше не могут быть достигнуты из корня, они образуют своего рода недостижимый островок ссылок.Они никогда не будут посещены и, наконец, будут сметены сборщиком мусора.

Также сделано несколько оптимизаций.Например, некоторые объекты создаются и выполняют свою работу один раз, а затем отмирают.Эти новые убираются очень агрессивно и быстро.Если они используются в течение более длительного периода времени, они будут считаться старыми, и их будут посещать реже, чтобы проверить, следует ли им собирать мусор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...