Когда ссылка на объект будет собирать мусор? - PullRequest
3 голосов
/ 09 января 2012

Кто-то сказал мне, что только когда ссылка установлена ​​на ноль, сборщик мусора будет собирать ее. Однако я думаю, что сборщик мусора будет собирать все ссылки вне области видимости, которые никогда не были установлены как нулевые.

Кто-нибудь может мне сказать, когда сборщик мусора потребует ссылку?

Ответы [ 3 ]

9 голосов
/ 09 января 2012

GC собирает объекты , а не ссылки.

GC будет собирать объект через некоторое время после того, как у него больше не будет живых ссылок. (ГХ недетерминированный)

2 голосов
/ 09 января 2012

То, что кто-то , вероятно, имел в виду, было то, что вы можете позволить GC собирать объект до того, как он выйдет из области видимости, установив переменную, которая содержит ссылку на этот объект, на null. Этот метод был полезен в прошлом для некоторых очень редких случаев (например, перед длительным циклом, который не ссылается на объект). Технология компиляторов сегодня делает эту идею практически бесполезной, потому что компиляторы достаточно умны, чтобы обнаруживать эти условия и действовать соответственно.

0 голосов
/ 09 января 2012

GC удалит объект из памяти «когда захочет». Вы можете попробовать запустить System.gc (), но это всего лишь подсказка для GC, что он должен работать. Когда GC работает, он находит не связанные объекты (или только объекты со слабыми ссылками и т. Д.). GC запускает частотные зависимости в области памяти. Чаще всего это происходит в райском пространстве. По умолчанию GC запускается в Eden Space, когда он заполнен, но вы можете настроить JVM.

Почему вы вообще беспокоитесь о ГК? В чем твоя проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...