GarbageCollector работает на основе Java Memory Model. В Java доступное приложение памяти делится на две части: куча и стек. Объект хранится в динамической памяти и доступен двумя способами: -
1) Объект может иметь ссылочную переменную, которая хранится в памяти стека. В этом случае к объекту можно получить прямой доступ с помощью его ссылочной переменной.
2) Объект может содержаться любым другим объектом и не иметь ссылки в памяти стека. В этом случае доступ к этому объекту возможен только с помощью этого объекта-контейнера. Таким образом, если объект контейнера является сборщиком мусора, то этот объект должен иметь право на сборку мусора.
Выполняя GarbageCollection, GarbageCollector проверяет, доступен ли объект прямо или косвенно по любой ссылке, доступной в стеке, если он есть, то он не будет собирать этот объект, иначе он его соберет.