Нет, «списка литературы» нет. GC не должен знать все, что ссылается на объект - ему просто нужно знать, ссылается ли что-либо на объект.
В качестве очень грубой модели того, что делает GC, он помечает каждый объект в куче как мусор, а затем смотрит на объекты, которые он знает как не-мусорные («корневые» объекты). Например, он будет смотреть на стек каждого потока и для каждого метода экземпляра в потоке обычно 1 помечает целевой экземпляр как не содержащий мусора.
Затем он пройдет через каждый из этих корней и увидит, к каким объектам относятся эти , и пометит их как не-мусор. Он отступит, найдя все, что может. Все, что не было помечено как не-мусор, может быть собрано (или завершено).
Как вы можете видеть из этого алгоритма, GC не нужно хранить полный список ссылок для каждого объекта - просто немного сказать "мусор" или "не мусор".
Очевидно, что в действительности GC намного сложнее, как в Java, так и в .NET, с поколенными сборщиками мусора и различными стратегиями для минимизации "паузы" GC и использования нескольких потоков для GC. Надеюсь, этого упрощенного представления достаточно, чтобы объяснить, почему даже в GC нет списка ссылок.
1 Не всегда, в случае .NET. Объект можно собирать мусором, пока метод экземпляра все еще выполняется "в" нем, если этот метод не ссылается на какие-либо поля в объекте с текущей точки и далее.