метод финализации и исключения - PullRequest
2 голосов
/ 08 июня 2011

Я не очень хорошо понимаю, когда GC игнорирует исключение, когда оно восстанавливает из памяти объект.

Если у меня есть try/catch в методе финализации, я вижу, что оно всегда выполняется... так в каких случаях исключение не выдается?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 08 июня 2011

метод finalize запускается потоком финализатора.если вы выбросите исключение, финализатор проигнорирует его (проглотит).В противном случае поток финализатора умрет.Это относится к исключениям, которые генерируются и не отлавливаются вашим кодом (внутри finalize()).Если вы поймаете исключение, это обычный бизнес.

2 голосов
/ 12 марта 2014

Похоже, что два существующих ответа говорят о том, что финализатор будет игнорировать любые необработанные исключения.Это кажется противоречащим ответу здесь: Исключение в методе финализации , который, кажется, имеет правильную ссылку на JSL.В нем говорится, что неперехваченные исключения будут прерывать финализацию соответствующего объекта (возможно, утечку ресурсов), но сам поток финализатора продолжит финализацию других объектов.Это соответствует эмпирическим результатам.

2 голосов
/ 08 июня 2011

Это означает, что любое исключение, выброшенное из метода finalize, игнорируется.Однако исключения внутри него все еще работают как обычно.

...