как предотвратить утечку памяти в JavaScript - PullRequest
6 голосов
/ 14 марта 2012

Я застрял в утечке памяти в JS проблем.

Javascript:

var index = 0;
function leak() {
    console.log(index);
    index++;
    setTimeout(leak, 0);
}
leak();

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

я сомневаюсь, что, похоже, переменные не занимают память.

почему?

любая мысль ценится.

1 Ответ

10 голосов
/ 14 марта 2012

Ваш код создает множество замыканий.Это предотвращает освобождение памяти.В вашем примере память будет освобождена после завершения всех таймаутов.

Это можно увидеть (через 100 секунд):

var index = 0;
var timeout;
function leak() {
    index++;
    timeout = setTimeout(leak, 0);
}

leak();

setTimeout(function() {
        clearTimeout(timeout);
}, 100000);

setInterval(function() {
        console.log(process.memoryUsage());
}, 2000);
...