2012-03-14 10 views
6

me atascó en la pérdida de memoria en problemas js.cómo evitar la pérdida de memoria en javascript

Javascript:

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

aquí es mis códigos de prueba, y lo uso instruments.app para detectar el uso de memoria de ella, y la memoria está subiendo muy rápido.

tengo dudas de que no parece que haya variables ocupando la memoria.

¿por qué?

cualquier pensamiento es apreciar.

+0

Entonces, ¿cuál es tu código de producción? tal vez solo la parte que importa. No tiene sentido fijar el código destinado a causar un problema. – tungd

+0

el código de producción causa el mismo problema. y simplemente me desvanezco para descubrir cómo liberar el uso de memoria en estos códigos. –

Respuesta

10

Su código crea un conjunto de cierres. Esto evita la liberación de memoria. En su ejemplo, la memoria se liberará después de completar todos los tiempos de espera.

Esto se puede ver (después de 100 segundos):

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, que es el objeto settimeout causado el problema. muchas gracias. –

+0

pero, la peor palabra del mundo, existe el problema de que si se produce el evento cleartimeout cuando no se activa la fuga, el programa se apagará. Acabo de poner el evento cleartimeout en la función de fuga, por lo que no se apagará. –

Cuestiones relacionadas