Нужно ли удалять фрагменты DOM или сборщик мусора удалит их? - PullRequest
4 голосов
/ 26 сентября 2011

Это может быть немного глупый вопрос.Я предполагаю, что сборщик мусора избавляется от любых висячих переменных после того, как функция завершает выполнение, но мне было интересно, относится ли это также к фрагментам DOM.

Если я создаю фрагмент DOM или любой неприкрепленный узел по этому вопросу, удалит ли его сборщик мусора после завершения функции?

//would this create a memory leak?
setInterval(function exampleScope() {
    var unusedDiv = document.createElement('div');
}, 10);

Я знаю, что этот пример бесполезен, но это самая простая форма шаблона, о котором я беспокоюсь.Я просто хочу знать, что я поступаю правильно.Я усердно работал над созданием очень высокопроизводительного игрового движка JavaScript, Red Locomotive .Я не хочу добавлять утечки памяти.

Ответы [ 2 ]

4 голосов
/ 26 сентября 2011

Утечка памяти в IE 7 с элементами DOM в обработчиках событий: Утечки jQuery решены, но почему?

С другим браузером у вас все будет в порядке.См. Освобождение памяти, используемой неприкрепленными узлами DOM в Javascript .

Если вы сильно беспокоитесь об утечках памяти и заботитесь о своих неграмотных технических пользователях IE, вы должны прочитать это: Понимание и решениеШаблоны утечек в Internet Explorer

3 голосов
/ 26 сентября 2011

Ну, это не на 100% убедительно, но я сделал быстрый JSFiddle, чтобы поэкспериментировать с этим.Это жесткий цикл, который запускает ваш код выше 100000000 раз.При использовании Chrome Task Manager использование памяти возросло с 47,9 МБ до 130 МБ и оставалось довольно постоянным до завершения, где оно уменьшилось до 60 МБ.

http://jsfiddle.net/u7yPM/

Это говорит о том, что узлы DOMбезусловно, сборщик мусора, иначе использование памяти продолжит увеличиваться на протяжении всего запуска теста.

РЕДАКТИРОВАТЬ: я запускал это на Chrome 14.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...