2012-03-14 10 views
6

mi sono bloccato nella perdita di memoria nei problemi js.come prevenire la perdita di memoria in javascript

Javascript:

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

Ecco il mio codice di prova, e io uso instruments.app per rilevare l'utilizzo di memoria di esso, e la memoria sta andando molto velocemente.

dubito che non ci siano variabili che occupano la memoria.

perché?

qualsiasi pensiero è apprezzato.

+0

Allora, qual è il vostro codice di produzione? forse solo la parte che conta. Non ha senso riparare il codice destinato a causare problemi. – tungd

+0

il codice di produzione causa lo stesso problema. e ho appena smesso di capire come rilasciare l'uso della memoria in questo codice. –

risposta

10

Il codice crea una serie di chiusure. Ciò impedisce il rilascio di memoria. Nel tuo esempio la memoria verrà rilasciata dopo il completamento di tutti i timeout.

Questo può essere visto (dopo 100 secondi):

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, ovvero l'oggetto settimeout ha causato il problema. molte grazie. –

+0

ma, la parola peggiore al mondo, c'è un problema che, se si verifica l'evento di cleartimeout quando la perdita non è trigger, il programma si spegne. ho appena inserito l'evento cleartimeout nella funzione leak, quindi non si spegnerà. –