Что произойдет, если во время finalize() возникнет исключение

Что произойдет, если во время выполнения finalize() возникнет исключение? Стек раскручивается как обычно? Он продолжает finalize() и игнорирует исключение? Останавливает ли он finalize() и продолжает ли GC объект? Или что-то другое?

Я не ищу рекомендаций по использованию finalize(), есть много страниц, объясняющих это.


person Peter Ølsted    schedule 14.06.2010    source источник


Ответы (3)


Из Object#finalize() javadoc:

Любое исключение, созданное методом finalize, приводит к остановке финализации этого объекта, но в противном случае игнорируется.

person Gnoupi    schedule 14.06.2010
comment
Совершенно не относящийся к вопросу, но... ОБОЖАЮ ВАШУ АВАТАРКУ. Grim Fandango была величайшей игрой EVAR! - person Tim Coker; 14.06.2010
comment
Мануэль определенно был доработан. - person cmccabe; 28.12.2012

Правильный способ кодирования финализатора, предполагая, что у вас есть веская причина для его написания, заключается в следующем:

protected void finalize() throws Throwable
{
  try
  {
    // my finalization code
  }
  finally
  {
    super.finalize();
  }
}
person user207421    schedule 15.06.2010

В случае, если будет выброшено исключение, то вызов finalize будет прерван, и в следующий раз он не будет вызываться, а объект будет GC-ed из памяти.

person jdevelop    schedule 06.03.2012