Podría ayudar a aclarar lo de la plataforma de GC que estás preguntando - JVM, CLR, Lisp, etc. Dicho:
En primer lugar para dar un paso atrás, ciertas variables locales de generalmente se asignan en la pila. Sin embargo, los detalles pueden variar según el idioma. Para tomar C# como ejemplo, solo se almacenan en la pila los Value Types locales y los parámetros del método. Por lo tanto, en C#, foo
se asignarían en la pila:
public function bar() {
int foo = 2;
...
}
Alternativamente, las variables asignados dinámicamente de uso de la memoria del montón. Esto debería tener sentido intuitivamente, ya que de lo contrario la pila tendría que crecer dinámicamente cada vez que se llame a new
. Además, significaría que tales variables solo podrían usarse como locals dentro de la función local que las asignó, lo que por supuesto no es cierto porque podemos tener (por ejemplo) variables de miembros de clase. Así que para tomar otro ejemplo de C#, en el siguiente caso result
se asigna en el montón:
public class MyInt
{
public int MyValue;
}
...
MyInt result = new MyInt();
result.MyValue = foo + 40;
...
Ahora, con estos antecedentes en mente, la memoria en el montón es recolección de basura. La memoria en la pila no necesita GC ya que la memoria se recuperará cuando regrese la función actual. En un nivel alto, un algoritmo GC funciona mediante el seguimiento de todos los objetos que se asignan dinámicamente en el montón. Una vez asignado a través de new
, el objeto será rastreado por GC, y se recopilará cuando ya no esté dentro del alcance y no haya más referencias al mismo.
¿Está preguntando sobre una plataforma/recolector de basura en particular? Edite sus etiquetas y/o preguntas para ser más específico. – Jay
Eso es en general ... Hablando en referencia al enlace de la wikipedia: http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29 –