2012-03-14 17 views
6

Zatrzymałem się w wycieku pamięci w problemach js.jak zapobiec wyciekom pamięci w javascript

Javascript:

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

tutaj jest moje kody testowe i używam instruments.app wykryć stosowanie pamięci o tym, i pamięć dzieje się bardzo szybko.

Mam wątpliwości, że wydaje się, że żadne zmienne nie zajmują pamięci.

dlaczego?

każda myśl jest doceniana.

+0

Więc co jest kod produkcji? może tylko ta część, która ma znaczenie. Nie ma sensu naprawianie kodu, który ma spowodować problem. – tungd

+0

kod produkcyjny powoduje ten sam problem. i właśnie chciałem wymyślić, jak zwolnić użycie pamięci w tych kodach. –

Odpowiedz

10

Twój kod tworzy zestaw zamknięć. Zapobiega to zwolnieniu pamięci. W twoim przykładzie pamięć zostanie zwolniona po zakończeniu wszystkich limitów czasu.

to widać (po 100 sekund):

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); 
+0

omg, to jest obiekt settimeout spowodował problem. wielkie dzięki. –

+0

, ale najgorszym słowem na świecie jest problem polegający na tym, że jeśli zdarzenie cleartimeout wystąpi, gdy wyciek nie zostanie wywołany, program zostanie zamknięty. Po prostu włączam funkcję cleartimeout w funkcji wycieku, więc nie nastąpi jej zamknięcie. –

Powiązane problemy