Если у меня есть два объекта в куче, ссылающиеся друг на друга, но они не связаны ни с одной ссылочной переменной, то подходят ли эти объекты для сборки мусора?




Проверьте это: Как сборщик мусора Java обрабатывает ссылки на себя.
Да, они. В основном сборщик мусора идет от «известных корней» (статические переменные, локальные переменные из всех фреймов стека во всех потоках), чтобы найти объекты, которые не могут быть собраны мусором. Если нет возможности добраться до объекта из корня, он имеет право на сбор.
Обновлено: Том указал на это, и я подумал, что стоит поднять его в самом ответе:
Technically, static variables are not roots - they are referenced by classes which are referenced by class loaders which are referenced by classes which are referenced by object which are referenced by root references.
Разница, скорее всего, будет неактуальной наиболее того времени, но это полезно знать :)
Скит, как всегда, на деньгах. Я бы только добавил, что описанная вами ситуация является причиной того, что подсчет ссылок (стандартная стратегия с ранними интеллектуальными указателями C++) не используется.
Технически статические переменные не являются корнями - на них ссылаются классы, на которые ссылаются загрузчики классов, на которые ссылаются классы, на которые ссылается объект, на который ссылаются корневые ссылки.