Un recolector de basura comienza desde algún conjunto "raíz" de lugares que siempre se consideran "accesibles", como los registros de la CPU, la pila y las variables globales. Funciona encontrando cualquier puntero en esas áreas, y encontrando recursivamente todo lo que señalan. Una vez que se encuentra todo eso, todo lo demás es basura.
Hay, por supuesto, bastantes variaciones, principalmente por el bien de la velocidad. Por ejemplo, la mayoría de los recolectores de basura modernos son "generacionales", lo que significa que dividen los objetos en generaciones, y a medida que un objeto envejece, el recolector de basura se alarga cada vez más entre las veces que intenta averiguar si ese objeto aún es válido o no. - Simplemente comienza a suponer que si ha vivido mucho tiempo, es muy probable que continúe viviendo aún más.
No obstante, la idea básica sigue siendo la misma: todo se basa en comenzar a partir de un conjunto raíz de cosas que da por sentado que aún se podrían usar, y luego perseguir todos los punteros para encontrar qué más podría estar en uso.
Interesante aparte: muchas personas pueden sorprenderse a menudo por el grado de similitud entre esta parte de un recolector de basura y el código para ordenar objetos para cosas como llamadas a procedimientos remotos. En cada caso, está comenzando desde algún conjunto raíz de objetos y persiguiendo punteros para encontrar todos los otros objetos a los que se refieren ...