2014-12-13 2 views
1

Этот вопрос о понимании документации Java для WeakReferenceПротиворечие в документации Java WeakReference в

Когда я прочитал о WeakReference Java, я наткнулся на это предложение в документации:

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

Но это Безразлично Для меня это имеет смысл. Предположим, что у меня есть WeakReference wrA, ссылающийся на объект A и другой WeakReference wrB, ссылающийся на объект B. И B сильно ссылается на A (прямо или косвенно через цепочку). Теперь, согласно документу, если A становится слабо доступным, и если B в то время уже слабо доступен, тогда wrB будет очищен вместе с wrA. Однако, так как B уже слабо достижимо в это время, не следует ли сначала очищать wrB в то время, когда обнаруживается слабая достижимость B?

+0

* Потому что B уже слабо доступен в это время * - Этот факт, возможно, до сих пор не обнаружен, нет? – aioobe

+0

Это может быть хорошей идеей перефразировать, поскольку кажется трудным получить, где именно проблема. – h22

ответ

0

, так как B уже недоступен в то время, не должен ли он быть очищен в раннее время, когда обнаружена слабая достижимость B?

Это происходит в то же время, поэтому более раннего времени не существует. Когда GC запускает все объекты (например, как A, так и B), которые в тот момент не достижимы, могут быть очищены в это время.

+0

Спасибо за ответ. Я думаю, что это скорее презентация в документе. Я просто не уверен, что обнаружение слабодоступного объекта B, находящегося на пути к другому слабодоступному объекту A посредством первого обнаружения A, лучше, чем просто определение самого B. Но я понятия не имею о графическом алгоритме, который используется GC, и я думаю, что реализация может выбрать любой порядок, который ему нравится, эффективный или нет. – user690421

+0

@ user690421 В документации нет конкретных данных, и JVM может выбрать любые подходящие средства. Я подозреваю, что различие, которое вы делаете, не полезно, и вы оказываетесь в одном и том же решении. Точка вокруг A заключается в том, что ее можно очистить, даже если она имеет сильную ссылку на нее, потому что это происходит через слабую ссылку. –

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

  • Нет связанных вопросов^_^