Сборщик мусора
Я тут задумался, а как работает сборщик мусора в JS?
// var obj = {a: 10}; // Создается в памяти некий "объект 1" var container = {o: obj}; // Создается в памяти некий "объект 2", в котором есть ссылка на "объект 1" obj = container = null;При этом сначала из памяти удалиться "объект 2", поскольку на него больше никто не ссылается. А потом и "объект 1", поскольку теперь и на него никто не ссылается. Пока вроде все правильно. А если так? var obj = {a: 10}; // Создается в памяти некий "объект 1" var container = {o: obj}; // Создается в памяти некий "объект 2", в котором есть ссылка на "объект 1" obj.c = container; // Создаем обратную ссылку obj = container = null;Теперь "объект 1" не может быть удален, поскольку на него ссылается "объект 2". А "объект 2" не может быть удален, поскольку на него ссылается "объект 1". 1. Я правильно понимаю? 2. И единственный выход удалить объекты из памяти - вручную поудалять обратные ссылки? |
|
Цитата:
+ ФФ вроде уже не течет, поправьте меня, если ошибаюсь. Я же спрашиваю, как работает сборщик мусора в JS без учета DOM. Привел конкретный пример. В этом примере объекты останутся висеть в памяти, пока страница не будет перегружена? |
Мараторий, а что мешает проверить?
|
В "JavaScript - The Definitive Guide" на стр 160. про это есть.
Цитата:
добавлено спустя 2 минуты: Хотя мне кажется, что если сборщик увидит что не сам объект не переменные хранящие ссылки больше не используются, то может и удалить. P.S.: хитрая это тема... |
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
P.S.: Проверить что-то лень. Извините. |
есть еще другой момент. А как узнать, что память не вернулась? Почему бы браузеру не оставить себе выделенную память, раз уж тут такие скрипты выполняются? Т.е. сами объекты были удалены, а память системе не вернулась
|
а хачем присваиваить налл ? есть же оператор delete
|
DooMer,
delete не удаляет переменные. |
Kolyaj,
действительно не удаляет, извините |
Часовой пояс GMT +3, время: 01:58. |