2011-03-16 24 views
7

He aprendido de este hilo garbage collection with node.js que node.js usa un GC generacional.Recolector de basura Node.js

Rutinariamente uso referencias de objeto cíclicas (las cuales elimino/aseguro saldré del alcance eventualmente) y me gustaría saber si node.js las maneja bien. Entonces por ejemplo si fue hecho usando ref. contando, habría un problema, entonces me gustaría saber qué tan bueno es el nodo en esto.

Algunos escenarios de uso:

  1. Para cada petición HTTP, que crean un setTimeout con una lambda que potencialmente tiene referencias a objetos de alcance. El objeto alcance también tiene una referencia al objeto de tiempo de espera, etc ...

  2. Por cada sesión de usuario, tengo un puntero (sigue haciendo de programación C) referencia a los objetos de solicitudes HTTP que también tiene referencias a la objeto de sesión, etc ... Los objetos de solicitud se eliminan a menudo, pero el objeto de sesión no lo es.

Editar: le pido a causa de este enlace que he encontrado en Internet http://lifecs.likai.org/2010/02/how-generational-garbage-collector.html

Respuesta

10

Como usted ha mencionado, NodeJS utiliza un GC generacional ... v8 específicamente. Y, por lo tanto, NO utiliza el tipo de conteo de referencia GC. En cambio, tiene un GC de marca y barrido completo.

De modo que mientras se deshaga de todas las referencias a un conjunto de objetos (incluso si cíclicamente se señalan entre sí), deberían obtener la recolección de basura en algún momento.

Eso no significa que no deba preocuparse por el GC. Si tiene un servidor NodeJS muy activo, el recolector de basura estará trabajando muy duro para limpiar su basura, especialmente si tiene muchos objetos de "vida útil media" (es decir, no de corta o larga vida).

+0

Gracias. ¿Sabe si el node.js (v8) GC se ejecuta en otro subproceso o en el mismo subproceso (como la ejecución de js)? ¿Tiene enlaces para lo mismo que puedo buscar? – dhruvbird

+0

Mismo hilo. Es un GC generacional que se detiene al mundo ... pero también lo son la mayoría de los demás. Hay algo de información [aquí] (http://code.google.com/apis/v8/embed.html#handles), pero probablemente no sea útil para ti. Si le preocupa algo, es posible que desee ver primero las soluciones que las personas usan en .NET o Java, serán similares en términos de GC. Y siempre puedes hacer preguntas específicas sobre stackoverflow :) – Amir

Cuestiones relacionadas