Встречается на собеседованиях • сегодня

Может ли finalize не вызываться

Да, finalize() может не вызываться. Это связано с тем, что сборщик мусора (GC) работает недетерминированно, и JVM не гарантирует его вызов. Вот основные причины:

  1. GC не запускался – если объект еще не удален, finalize() не выполнится.
  2. Принудительное завершение – при System.exit() или аварийном завершении.
  3. Исключение в finalize() – если в другом finalize() выброшено исключение, оставшиеся могут не выполниться.
  4. Объект достижим – если во время финализации объект снова становится достижимым (например, сохраняется в статическое поле).

Пример:

java
public class Example {
    @Override
    protected void finalize() throws Throwable {
        System.out.println("Finalize called");
    }

    public static void main(String[] args) {
        new Example(); // Объект станет мусором, но finalize() может не вызваться
        System.gc();   // Не гарантирует вызов finalize()
    }
}
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы