Страницы

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

воскресенье, 22 декабря 2019 г.

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

#java #сборщик_мусора


Из одной статьи


  Сборщик очистит финализированный объект за два шага: в первый выполниться finalize,
а во второй соберется.


И так вопросы


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

    


Ответы

Ответ 1



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

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

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