Sobes.tech
Junior

Как работи събирачът на боклук в JavaScript?

sobes.tech AI

Отговор от AI

В JavaScript работи автоматичен събирач на отпадъци, който идентифицира обекти, които вече не са достъпни от достижимите корени (глобален обект, текущо извикване на функция и т.н.) и освобождава заетата от тях памет.

Основни механизми:

  • Брояч на препратки: Стар метод, който брои колко препратки има към обект. Паметта се освобождава, когато броячът достигне нула. Недостатък: не може да обработва циклични препратки.
  • Маркиране и почистване: Модерен и най-разпространен метод.
    1. Маркиране: Започвайки от корените, събирачът на отпадъци рекурсивно обхожда графа на обектите и маркира всички достъпни обекти.
    2. Почистване: Обхожда купчини и премахва всички обекти, които не са маркирани като достъпни.

Предимството на "Маркиране и почистване" пред "Брояч на препратки" е, че правилно обработва цикличните препратки.

JavaScript двигателят (например V8 в Chrome) постоянно следи използването на паметта и при необходимост стартира събирача на отпадъци. Разработчикът не може директно да контролира този процес, но може косвено да влияе, като избягва ненужни препратки и управлява жизнения цикъл на сложните обекти.