Следующий код javascript, кажется, течет памятью, но я не уверен, почему. Я попытался это в хроме 19 и Firefox 12. Код ниже:Javascript removeChild memory leak?
<body>
<input id="add" type="button" value="add" onclick="add()" />
<input id="remove" type="button" value="remove" onclick="remove()" />
<div id="content">
</div>
</body>
<script>
var count = 0;
function add() {
var i = 0,
newdiv;
for (i = 0; i < 10000; i++) {
newdiv = document.createElement('div');
document.getElementById("content").appendChild(newdiv);
newdiv.setAttribute('id', "div" + count);
newdiv.innerHTML = "section " + count;
newdiv = null;
count = count + 1;
}
}
function remove() {
var i = 0;
for (i = 0; i < count; i++) {
document.getElementById("content").removeChild(document.getElementById("div" + i));
}
count = 0;
}
</script>
Когда вы держите нажав добавить кнопку, а затем удалить кнопку памяти в Windows Task Manager продолжает расти , Я ожидал, что память уменьшится в какой-то момент, когда сбор мусора начнется, но это, похоже, не происходит.
Итак, мои вопросы: есть ли утечка памяти в этом коде? И если так как я могу реорганизовать код, чтобы исправить утечку?
Кажется, что без проблем с памятью в Chromium 19/Ubuntu 11.04. –
только одно или два предположения: 'newdiv = null;' не равно 'delete newdiv', поэтому я мог бы подумать, что удаление лучше, чем установка некоторого значения в' null', который фактически не является 'undefined' ... если вы используете локально хранящаяся ссылка на документ и выполнение всего в закрытии, а не создание материала в глобальном оконном обэте, даже ускорит это и уменьшит использование памяти imho –