2012-05-07 20 views
8

Si creo un objeto sin asignarlo a nada, ¿cuándo recogerá Javascript este objeto? Aquí hay un ejemplo:¿Cómo se recolectan los objetos anónimos en JavaScript?

alert(new Date().getTime()); 

Si no se realiza dicha recolección de basura, ¿se producirá una pérdida de memoria?

for (var i = 0; i < 99999999; i++) { 
    console.info(new Date().getTime()); 
} 
+0

¿Tiene un problema? –

+1

Las respuestas directas a sus preguntas ("los objetos se recogen en algún momento después de que ya no se mencionen" y "no, no causará una fuga") probablemente no sean lo que realmente está buscando. ¿Qué es lo que realmente quieres saber? – Phrogz

+2

@AshBurlaczenko y Phrogz: no creo que haya nada de malo en preguntar sobre este tipo de cosas como está. Si está tratando de optimizar algún código, tal vez para reducir el uso de memoria, esto es algo muy bueno de saber, y no tiene que estar vinculado a un problema en particular. – nickf

Respuesta

7

Si nadie en el alcance está haciendo referencia a los objetos anónimos, obtendrán la basura recogida la próxima vez que se ejecute el GC.

Por lo tanto, después de que Console.info termine de ejecutarse, están listos para la recolección de basura. Si configura cualquier variable dentro del ámbito para referirse a ellos, entonces no lo harán.

4

La belleza de la recolección de basura es que no te saber cuándo será reclamado la memoria, ni debe cuidar (a menos que esté sucediendo con demasiada frecuencia).

En esta situación, el tiempo de ejecución debería eventualmente reclamar esas instancias Date, pero nada de lo que hagas realmente va a cambiar la rapidez con que lo hace. Además, esto NO provoca una pérdida de memoria.

4

JavaScript ejecuta GC (recolector de basura) automáticamente para reclamar la memoria ocupada por cadenas, objetos, matrices y funciones que ya no se usan.

Una característica clave de la recolección de basura es que el recolector de basura debe ser capaz de determinar cuándo es seguro reclamar memoria. Obviamente, nunca debe recuperar valores que todavía están en uso y debe recopilar solo valores que ya no son alcanzables; es decir, a los valores que no pueden llamarse a través de cualquiera de las variables, propiedades del objeto o elementos de matriz en el programa.

Referencia:Here.

Cuestiones relacionadas