Экземпляры, на которые ссылается только «bound_this», не собираются мусором [javascript]


Answers

Я упомянул об этом в EcmaScript , этот термин «связал это» с классом,

Методы класса «привязали это», где это в теле метода всегда связано с экземпляром класса, из которого был извлечен метод, независимо от того, что этот параметр фактически передан методу (этот параметр для метода игнорируется) ,

Теперь здесь, в вашем примере нет образца сценария, поэтому не может быть конкретным вопросом,

Я должен сказать, если это не утечка.

то с тем, что когда-либо объект, класс сценарий ограничен, он не будет вызывать мусор до тех пор, пока класс / объект не будет существовать, поскольку эта функция ограничена одним и тем же объектом .. он будет мусором, собранным только после его родительского объекта (объект / класс, с которым он заканчивается).

Теперь, если круговая ссылка, когда задача завершится, она будет завершена, >> это работает как концепция Recursion (не забывайте о концепции, не такой, как) .. поэтому конец будет начинаться с последнего вызова .. в обратном порядке .. внутренний вызов (последний звонок) будет выпущен первым .. и так далее

Код должен быть ошибочным, так как он не должен связываться и определять функцию и повторное использование каждый раз .. но если они привязаны, то также он должен работать нормально и не должен течь, пока след не исчезнет из пределов пула памяти.

Надеюсь, это объяснит ..

Question

У меня вопрос о сборке мусора в 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 on bound_this )

Я пропустил что-то очевидное здесь, и если да, может кто-нибудь объяснить, что поддерживает эти случаи?

ОБНОВИТЬ:
Тем временем я тестировал одно и то же приложение в хрониуме (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, чтобы включить скрытые свойства. Результат (с одним из ветвей расширены) можно увидеть на следующем скриншоте, но это не требует меня.