Я не очень хорошо понимаю, когда GC игнорирует исключение, когда оно восстанавливает из памяти объект.
Если у меня есть try/catch в методе финализации, я вижу, что оно всегда выполняется... так в каких случаях исключение не выдается?
try/catch
Спасибо.
метод finalize запускается потоком финализатора.если вы выбросите исключение, финализатор проигнорирует его (проглотит).В противном случае поток финализатора умрет.Это относится к исключениям, которые генерируются и не отлавливаются вашим кодом (внутри finalize()).Если вы поймаете исключение, это обычный бизнес.
finalize
finalize()
Похоже, что два существующих ответа говорят о том, что финализатор будет игнорировать любые необработанные исключения.Это кажется противоречащим ответу здесь: Исключение в методе финализации , который, кажется, имеет правильную ссылку на JSL.В нем говорится, что неперехваченные исключения будут прерывать финализацию соответствующего объекта (возможно, утечку ресурсов), но сам поток финализатора продолжит финализацию других объектов.Это соответствует эмпирическим результатам.
Это означает, что любое исключение, выброшенное из метода finalize, игнорируется.Однако исключения внутри него все еще работают как обычно.