Поведение сборки мусора с изолированными циклическими ссылками?

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
7
0
1 814
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Проверьте это: Как сборщик мусора Java обрабатывает ссылки на себя.

Вы можете проверить java.lang.ref.WeakReference

Ответ принят как подходящий

Да, они. В основном сборщик мусора идет от «известных корней» (статические переменные, локальные переменные из всех фреймов стека во всех потоках), чтобы найти объекты, которые не могут быть собраны мусором. Если нет возможности добраться до объекта из корня, он имеет право на сбор.

Обновлено: Том указал на это, и я подумал, что стоит поднять его в самом ответе:

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.

Разница, скорее всего, будет неактуальной наиболее того времени, но это полезно знать :)

Технически статические переменные не являются корнями - на них ссылаются классы, на которые ссылаются загрузчики классов, на которые ссылаются классы, на которые ссылается объект, на который ссылаются корневые ссылки.

Tom Hawtin - tackline 09.01.2009 15:08

Скит, как всегда, на деньгах. Я бы только добавил, что описанная вами ситуация является причиной того, что подсчет ссылок (стандартная стратегия с ранними интеллектуальными указателями C++) не используется.

Другие вопросы по теме