Подтвердить что ты не робот

Как работает сборка мусора в Java?

Мне было интересно, как сборщик мусора в Java имеет дело со следующей ситуацией.

Объект A имеет ссылку на объект B, а объект B имеет ссылку на объект C. Основная программа имеет ссылку на Object A. Таким образом, вы можете использовать Object B через Object A и Object C через Object B через Object A.

Что происходит с объектами B и объектом C, если для ссылки между объектом A и объектом B установлено значение null?

Если объект B и объект C теперь собираются сборщиком мусора? Я имею в виду, что между объектом B и объектом C все еще существует связь.

4b9b3361

Ответ 1

Если объект B и объект C теперь были собранный сборщиком мусора?

Да. Ну, они являются кандидатами на сбор, потому что нет возможности достичь объектов B и C через корень, который является A.

Ответ 2

Да, B и C имеют право на сбор мусора, если они не могут быть получены из любого GC-корня (корни GC обычно являются целыми и все ссылки в стеке).

Ответ 3

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

Ответ 5

Фактически, сборка мусора в java - это очень сложная вещь, гораздо больше, чем в интерпретаторе Ruby, в качестве примера.

Во всяком случае, теоретическая основа одинакова.

GC идентифицирует графики объектов, которые не достижимы по программному коду (это означает, что у них больше нет ссылки в активном коде). Когда речь идет о графе объектов, я точно говорю о графе объектов B- > C. когда он недоступен, он может быть GC'ed, но вы не можете сказать, когда это произойдет, из-за того, что GC пытается максимально оптимизировать свою работу, чтобы избежать замедления приложения.

Ответ 6

B и C удовлетворяются за сбор мусора, потому что вы больше не можете обращаться к ним. С непредсказуемостью сборщика мусора, который мы знаем, они, скорее всего, собираются в какой-то момент в будущем.

Ответ 7

Я думаю, что логика другая. Если объект недоступен из потока, его можно собрать.

Ответ 8

Если ссылка на объект отсутствует, тогда для GC будет полезно продолжить

Ответ 9

B не ссылается на него, поэтому сначала будет собирать мусор, тогда он поймет, что C не имеет к нему ссылки, поэтому C будет собираться мусором. Это для иллюстрации, Jvm достаточно умен, чтобы выкапывать их в одну развертку.