@brucebanner

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

Первый вопрос. Из одной статьи.

System.runFinalization() создает второй поток "SecondaryFinalizer", который также вызывает finalize() для объектов из той же очереди, при этом поток, вызвавший System.runFinalization() ждёт, пока не кончится очередь Finalizer, которая имеется на данный момент.


Я здесь не понял, он будет работать параллельно? Или же всё таки дождётся окончания первого потока и продолжит, но тогда какой толк от этого.

Второй вопрос. Цитата ниже уже из другой статьи.

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

  1. Сборщик идёт гулять по памяти
  2. Останавливает все потоки
  3. Делает свои операции с объектами в зависимости от подхода. Встречает финализированный объект, выполняет код в теле finalize() и отправляет его в очередь Finalizer на удаление.
  4. Очищает память от мусора, не трогая очередь Finalizer.
  5. Возобнавляет работу приложения.


Второй проход.

Тоже самое, только на третьем пункте параллельно идёт поток Finalizer, очищая объекты из очереди.

Я правильно понял? Или Поток Finalizer работает вне зависимости от самого сборщика. И уже в первом проходе на пункте 4 поток Finalizer будет жить своей жизнью. И действует ли stop the world на поток Finalizer? И еще вопрос на пункте 3, код в теле finalize выполнится сразу перед помещением в очередь или уже в очереди перед удалением?

Большое спасибо!
  • Вопрос задан
  • 221 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
26 апр. 2024, в 18:27
200000 руб./за проект
26 апр. 2024, в 18:24
80000 руб./за проект
26 апр. 2024, в 18:00
500 руб./за проект