08. Функции. Часть 2. Замыкания
Сборка мусора
![]() |
В программировании сборка мусора (устоявшийся термин, с точки зрения
русского языка правильнее «сбор мусора», англ. garbage collection,
GC) — одна из форм автоматического управления памятью.
Специальный код, называемый сборщиком мусора (garbage collector),
периодически освобождает память, удаляя объекты, которые уже не
будут востребованы приложением — то есть производит
сборку мусора.
Цитата из Википедии
|
![]() |
Посмотрите на следующий код:
Много раз мы анализировали работу подобного кода по шагам:
Все ясно, правда? |
![]() |
А теперь, следом за первой строкой кода запишем вторую:
Здесь тоже все понятно: число 1 записывается в переменную x (в ту ячейку памяти фиксированной длины, которая отведена под x). А что случилось со ссылкой на объект? Понятно, что. Она пропала, затерлась единицей. А что случилось с самим объектом? |
Предположим, что объект остался в памяти. Но этот объект — явный мусор: нет переменных, которые на него ссылаются, значит, к нему никак нельзя обратиться из программы.
Хорошо бы такие объекты удалять из памяти, освобождая пространство для новых нужд. Иначе во время работы программы может наступить момент, когда мусором будет забита вся память.
Конечно, мусор надо убирать. За чистотой в доме следит сборщик мусора — составная часть интерпретатора JavaScript.
|
У сборщика мусора есть «журнал» учета памяти. |
|
Вид журнала (условно) после выполнения первой строки:
|
|
Вид журнала (условно) после выполнения второй строки:
|
Сборщик мусора, просматривая журнал, обнаружит, что на область памяти, отведенную под объект {s:"лиса"}, нет ни одной ссылки. Объект будет уничтожен, свободная память пополнится. Сборщик мусора отложит метлу и выпьет стакан чаю.
А теперь посмотрите на следующий код:
var x = {s:"лиса"};
var y = x;
x = 1;
Есть работа для сборщика мусора? Нет, он отдыхает. В самом деле, посмотрим, как заполняется журнал учета памяти.
![]() |
После первой команды:
|
![]() |
После второй команды:
|
![]() |
После третьей команды:
Объект не уничтожен, так как на него ссылается переменная y (переменная x ссылаться перестала). С такой ситуацией мы уже сталкивались: смотрите комментарий к решению задания 3 из заметки 7. |