Эта статья А. Хантера объясняет все это довольно хорошо.
Короче говоря, GC следует ссылкам, чтобы найти все недоступные объекты. Объект ссылается на другой объект, если он или любой из его суперклассов содержит поле с другим объектом.
Для этого GC отслеживает четыре типа корневых объектов, называемых GC root . Самый распространенный тип корня - это все переменные, созданные в стеке (как вы уже догадались). Другие корневые типы - это статика, связанные с взаимодействием и объекты с методом финализатора.
Так что да, GC ссылается на стек в большинстве случаев.