JavaScript·100 питань

QUESTION: Що таке garbage collection?

Відповідь

Збирання сміття в JavaScript є механізмом автоматичного керування пам'яттю. Він повністю позбавляє програміста необхідності вручну виділяти і звільняти байти в оперативній пам'яті, як це робиться в низькорівневих мовах на кшталт C або C++.

Головним алгоритмом, який використовується сучасними рушіями для цих цілей, є алгоритм під назвою Mark-and-sweep, що в перекладі означає «помітка і очищення». Цей процес працює циклічно у фоновому режимі.

Збирач сміття починає обхід графа об'єктів від кореневих елементів, таких як об'єкт глобальної області видимості window або global, і позначає всі доступні та досяжні об'єкти як активні та потрібні. Усі ті сутності, до яких неможливо дійти за ланцюжком посилань від коренів, вважаються застарілими та видаляються з пам'яті.

Для тонкого налаштування роботи з пам'яттю та запобігання витокам у складних додатках розробники використовують спеціальні структури даних, такі як WeakMap і WeakSet. Вони зберігають слабкі посилання на об'єкти, що дозволяє гнучко керувати життєвим циклом даних.

Якщо на об'єкт у WeakMap більше немає інших сильних посилань у коді, він автоматично видаляється збирачем сміття, навіть попри те, що він присутній у цій карті. Важливо розуміти, що цей процес є повністю автоматизованим, і програміст не може примусово запустити його вручну з коду скрипта, хоча деякі середовища виконання і надають приховані прапорці для налагодження.

Чи корисна ця відповідь?

Інші питання цієї теми

Пов’язані питання з інших тем