Um coletor de lixo inicia a partir de um conjunto "raiz" de locais que são sempre considerados "alcançáveis", como registros da CPU, pilha e variáveis globais. Ele funciona encontrando qualquer ponteiro nessas áreas e encontrando recursivamente tudo o que aponta. Uma vez encontrado tudo isso, tudo o resto é lixo.
É claro que existem algumas variações, principalmente por uma questão de velocidade. Por exemplo, a maioria dos coletores de lixo modernos é "geracional", o que significa que eles dividem objetos em gerações e, à medida que um objeto envelhece, o coletor de lixo fica cada vez mais longo entre as vezes em que tenta descobrir se esse objeto ainda é válido ou não. - apenas começa a supor que, se tiver vivido muito tempo, as chances são muito boas de que ele continue a viver ainda mais.
No entanto, a idéia básica permanece a mesma: tudo se baseia em partir de um conjunto raiz de coisas que é dado como certo ainda podem ser usadas e, em seguida, buscar todos os indicadores para descobrir o que mais poderia estar em uso.
Interessante à parte: muitas vezes as pessoas se surpreendem com o grau de semelhança entre essa parte de um coletor de lixo e o código para organizar objetos para coisas como chamadas de procedimentos remotos. Em cada caso, você está começando a partir de um conjunto raiz de objetos e perseguindo ponteiros para encontrar todos os outros objetos aos quais se refere ...