У меня вопрос о сборке мусора в google chrome (версия 20.0.1132.47, Ubuntu 11.04 64 бит).
Сравнивая кучи-дампы и проверяя утечки памяти, я обнаружил некоторые экземпляры, которые никогда не очищаются. Обычно это поведение можно отследить до ошибки программиста, но в этом случае я довольно невежественный.
Взгляните на следующий снимок экрана
Экземпляр "child @610739" ссылается только на экземпляры "bound_this", которые относятся к функциям самого дочернего экземпляра. Поэтому, насколько мне известно, дочерний экземпляр должен быть собран с помощью мусора, так как единственная другая ссылка, удерживающая его, - это сам дочерний экземпляр (через функции "bound_this" ).
Я использую функцию утилиты underscore.js 'bindAll' (underscore.js # bindAll), которая сопоставляется с функцией native_bind хром (ECMA Script wiki on bound_this)
Я пропустил что-то очевидное здесь, и если да, может кто-нибудь объяснить, что поддерживает эти экземпляры?
UPDATE:
Тем временем я тестировал одно и то же приложение в хрониуме (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, чтобы включить скрытые свойства. Результат (с одним из ветвей расширены) можно увидеть на следующем скриншоте, но это не требует меня.