На самом деле, сборка мусора в java - очень сложная вещь, гораздо больше, чем, например, в интерпретаторе Ruby.
Во всяком случае, теоретические основы одинаковы.
GC идентифицирует графы объектов, которые более недоступны для программного кода (то есть они не имеют больше ссылок в активном коде). Говоря об объектном графе, я говорю именно об объектном графе B-> C. когда он недоступен, он может быть скопирован с помощью GC, но вы не можете сказать, когда это произойдет, поскольку GC пытается максимально оптимизировать свою работу, чтобы избежать замедления работы приложения.