Страницы

Поиск по вопросам

четверг, 15 ноября 2018 г.

Сборщик мусора и метод finalize в Java

Из одной статьи
Сборщик очистит финализированный объект за два шага: в первый выполниться finalize, а во второй соберется.
И так вопросы
Когда сборщик встречает финализированный объект он сначало отправляет его на очередь. И код в методе finalize выполняется уже в очереди. Когда метод выполнится он станет доступен сборщику и уничтожится при следующей сборке. Я правильно понял? Stop the world действует на поток Finalizer?


Ответ

Да, вы правы - после выполнения метода finalize() объект должен быть повторно собран сборщиком мусора (и это считается серьезной проблемой метода finalize() - он мешает сборщику мусора освобождать память).
К слову, не обязательно объект будет доступен для сборки сразу же - метод finalize() может сохранить куда-нибудь ссылку на объект. Подобная ситуация называется "возрождением" объекта и, вообще говоря, считается антипаттерном. Главная проблема такого трюка - в том, что "возродить" объект можно только 1 раз.

Stop the world безусловно действует на поток Finalizer, поскольку это такой же поток как и все остальные.

Комментариев нет:

Отправить комментарий