К какому классу в Java относится OutOfMemoryError?

«К какому классу в Java относится OutOfMemoryError?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

OutOfMemoryError относится к классу java.lang.Error, а не к java.lang.Exception. Это неконтролируемое (unchecked) исключение, сигнализирующее о критической проблеме в среде выполнения JVM, например, о нехватке памяти.

Ключевые отличия:

  • Error — указывает на серьёзные системные проблемы, которые приложение обычно не должно пытаться обрабатывать (например, StackOverflowError, VirtualMachineError).
  • Exception — представляет условия, которые само приложение может и должно обрабатывать (например, IOException, SQLException).

Пример:

public class MemoryExample {
    public static void main(String[] args) {
        try {
            // Попытка выделить массив нереального размера
            int[] hugeArray = new int[Integer.MAX_VALUE];
        } catch (OutOfMemoryError e) {
            // Перехват возможен, но обычно не рекомендуется для "исправления"
            System.err.println("Критическая ошибка памяти: " + e.getMessage());
            // Логирование и корректное завершение работы — лучшая практика
        }
    }
}

Почему это важно: Перехватывать Error следует только для логирования или безопасного завершения работы, так как состояние JVM после этого может быть нестабильным.