Показать сообщение отдельно
  #1 (permalink)  
Старый 16.02.2010, 11:29
Аватар для Мараторий
Кандидат Javascript-наук
Отправить личное сообщение для Мараторий Посмотреть профиль Найти все сообщения от Мараторий
 
Регистрация: 22.01.2010
Сообщений: 114

Сборщик мусора
Я тут задумался, а как работает сборщик мусора в 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. И единственный выход удалить объекты из памяти - вручную поудалять обратные ссылки?
Ответить с цитированием