Hace un tiempo un amigo me hizo esta pregunta, y la verdad es que yo tengo una idea de lo que es un GC y alguna vez he leido un par de artículos acerca de cómo funciona el GC en ruby, pero no sé mucho más que eso, entonces decidí ponerme aprender, para esto arranqué desde cero, acá les dejo un resúmen de la traducción del artículo de Garbage Collection en wikipedia
El Garbage Collector es una forma de administración automática de la memoria, su función es "reclamar" la memoria ocupada por objetos que ya no se usan en el programa, GC fué inventado por "John McCarthy" en 1959 para resolver problemas en Lisp.
El GC es la forma opuesta a la administración manual de la memoria la cual require que el programador especifique cuales objetos "de-alocar" para así devolver la memoria al sistema. Por otro lado muchos sistemas usan una combianción de ambas formas incluyendo otras técnicas como "stack allocation" y "region inference".
Los dos principios básicos de GC son:
1- Encontrar objetos de datos en un programa que no van a poder accederse en el futuro
2- Recoger los recursos usados por esos objetos
Muchos lenguajes de programación usan GC como Java, C# y la mayoría de los lenguajes de scripting, otros lenguajes fueron diseñados para ser usados con manejo manual de la memoria pero también tienen una implementación con GC como: c, c++. Algunos lenguales como Ada, Modula-3 permiten tanto GC como manejo manual de la memoria.
Accesibilidad de un objeto:
Informalmente un objeto es accesible si es referenciado por lo menos por una variable en el programa, tanto directamente o atraves de la referencia de otro objeto accesible. Pero más precisamente los objetos pueden ser accesibles de dos maneras:
1- Se asume que un distinguido conjunto de objetos va a ser accesible, estos son conocidos como los fundamentales. Típicamente esto incluye: todos los objetos referenciados desde el "call stack" (esto es, todas las variables locales y parametros en las funciones que están siendo invocadas en ese momento), y cualquier variable global.
2- Cualquier cosa referenciada desde un objeto accesible es en sí misma accesible, más formalmente, la accesibilidad es transitiva.
Fuente: http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29
Continuará...