У меня вопрос по сбору мусора -в google chrome (Версия 20.0.1132.47, Ubuntu 11.04 64bit ).
Сравнивая дампы кучи -и проверяя утечки памяти -, я обнаружил некоторые экземпляры, которые никогда не очищаются. Обычно такое поведение можно связать с ошибкой программиста -, но в данном случае я довольно невежественен..
Взгляните на следующий скриншот
На экземпляр 'child @610739' ссылаются только 'привязанные _this' экземпляры, принадлежащие функциям самого дочернего экземпляра -. Итак, насколько я понимаю, дочерний -экземпляр должен быть собран -мусором, поскольку единственная другая ссылка, удерживающая его, — это сам дочерний -экземпляр (через «связанные _this» функции ).
Я использую служебную функцию «bindAll» underscore.js(underscore.js #bindAll)это соответствует «родной _bind» функции chrome(ECMA Script wiki на привязке _это)
Я упускаю здесь что-то очевидное, и если да, может ли кто-нибудь объяснить, что поддерживает эти экземпляры?
ОБНОВЛЕНИЕ:
Тем временем я протестировал это же приложение в chrominium (18.0.1025.168 (Developer Build 134367 Linux )Ubuntu 11.10 ), которое не показывает эти оборванные экземпляры..
ОБНОВЛЕНИЕ 2:
Следуя совету Esailijas предоставить фрагмент jsfiddle, я создал его(http://jsfiddle.net/8gSTR/1/)это имитирует то, что я в основном делаю. Запуск этой скрипки, к сожалению, не показывает неправильное поведение, которое я испытываю в своем приложении.Дамп кучи -, полученный, когда на экземпляры 'a' -все еще ссылаются, выглядит примерно так же, несмотря на ссылку из массива window.o, который поддерживает экземпляры живыми :
. Поскольку в моем случае такая ссылка отсутствует (скриншот 1 )Я не знаю, что мешает хрому освободить эти экземпляры...
ОБНОВЛЕНИЕ 3:
Следовал совету loislos, чтобы включить скрытые свойства. Результат (с одной из развернутых ветвей )можно увидеть на следующем снимке экрана, но я не продвигаюсь дальше.