Из одной статьи
Сборщик очистит финализированный объект за два шага: в первый выполниться finalize, а во второй соберется.
И так вопросы
Когда сборщик встречает финализированный объект он сначало отправляет его на очередь. И код в методе finalize выполняется уже в очереди. Когда метод выполнится он станет доступен сборщику и уничтожится при следующей сборке. Я правильно понял?
Stop the world действует на поток Finalizer?
Ответ
Да, вы правы - после выполнения метода finalize() объект должен быть повторно собран сборщиком мусора (и это считается серьезной проблемой метода finalize() - он мешает сборщику мусора освобождать память).
К слову, не обязательно объект будет доступен для сборки сразу же - метод finalize() может сохранить куда-нибудь ссылку на объект. Подобная ситуация называется "возрождением" объекта и, вообще говоря, считается антипаттерном. Главная проблема такого трюка - в том, что "возродить" объект можно только 1 раз.
Stop the world безусловно действует на поток Finalizer, поскольку это такой же поток как и все остальные.
Комментариев нет:
Отправить комментарий