2013-08-20 4 views
1

Если объект А имеет ссылку на объект B, а объект B имеет ссылку на объект A, и у них нет других ссылок на живые ссылки, то могут ли они иметь доступ к GC?Право на получение объекта для GC

+0

http://stackoverflow.com/questions/1910194/garbage-collection-in-java-and-circular-references – NPE

+1

yes ............... –

ответ

3

Да. Сбор мусора объектов в Java может произойти, если объекты не являются достижимыми. Циркулярные ссылки не затрагиваются.

Одно определение достижимости обеспечивается пакет документации для java.lang.ref:

Переход от сильного до самого слабого, различные уровни достижимости отражают жизненный цикл объекта. Они определяются в оперативном порядке следующим образом:

  • Объект может быть достигнут, если он может быть достигнут нитью без прохождения каких-либо ссылочных объектов. Заново созданный объект сильно доступен потоку, который его создал. Объект находится в недоступном для пользователя месте, но его можно достичь, пройдя мягкую ссылку.
  • Объект слабо доступен, если он не является ни сильным, ни мягко достижимым, но может быть достигнут путем прохождения слабой ссылки. Когда слабые ссылки на слабо достижимый объект очищаются, объект становится пригодным для завершения.
  • Объект является фантомным достижимым, если он не является ни сильно, неточно, ни слабодоступным, он был доработан, и к нему относится фантомная ссылка.
  • И, наконец, объект недоступен и, следовательно, имеет право на рекультивацию, когда он недоступен ни в одном из указанных способов.
0

GC в Java рассматривает объекты «мусор», если они не доступны через цепочку, начиная с корнем сбора мусора, так что эти объекты будут собраны. Даже если объекты могут указывать друг на друга, чтобы сформировать цикл, они все еще мусор, если они отрезаны от корня.

Смежные вопросы