Я знаю, что GC собирает объекты, у которых нет ссылок, указывающих на объект, но что происходит в случае объектов-слушателей?Как GC знает, когда собирать объект?
Предположим, у вас есть AnimationDelegate
, который прослушивает данные от DataSupplier
. Когда DataSupplier
получает данные и отключает это событие до AnimationDelegate
, делегат затем аннулирует (/ update/redraw и т. Д.) A Graphic
. Теперь скажите, что экран отключен, удален или, с помощью различных средств, графику больше нельзя рисовать и собирать. AnimationDelegate
по-прежнему зарегистрирован на DataSupplier
. Как ГК знает, чтобы собрать его? Следует ли отменить регистрацию делегата в графике finalize()
?
Он использует подсчет ссылок. В принципе, всякий раз, когда больше нет указателей на объект, это будет мусор, собранный на следующем проходе GC. – aroth
@aroth это не так. – alf
Фактически это зависит от реализации. Я помню, что некоторые по-прежнему используют подсчет ссылок, но я не думаю, что GC, который поставляется с JVM HotSpot, делает это. –