Экземпляры, на которые ссылается только «bound_this», не собираются мусором [javascript]
Я упомянул об этом в EcmaScript , этот термин «связал это» с классом,
Методы класса «привязали это», где это в теле метода всегда связано с экземпляром класса, из которого был извлечен метод, независимо от того, что этот параметр фактически передан методу (этот параметр для метода игнорируется) ,
Теперь здесь, в вашем примере нет образца сценария, поэтому не может быть конкретным вопросом,
Я должен сказать, если это не утечка.
то с тем, что когда-либо объект, класс сценарий ограничен, он не будет вызывать мусор до тех пор, пока класс / объект не будет существовать, поскольку эта функция ограничена одним и тем же объектом .. он будет мусором, собранным только после его родительского объекта (объект / класс, с которым он заканчивается).
Теперь, если круговая ссылка, когда задача завершится, она будет завершена, >> это работает как концепция Recursion (не забывайте о концепции, не такой, как) .. поэтому конец будет начинаться с последнего вызова .. в обратном порядке .. внутренний вызов (последний звонок) будет выпущен первым .. и так далее
Код должен быть ошибочным, так как он не должен связываться и определять функцию и повторное использование каждый раз .. но если они привязаны, то также он должен работать нормально и не должен течь, пока след не исчезнет из пределов пула памяти.
Надеюсь, это объяснит ..
У меня вопрос о сборке мусора в 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, чтобы включить скрытые свойства. Результат (с одним из ветвей расширены) можно увидеть на следующем скриншоте, но это не требует меня.