Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: resource management, garbage collector

Зачем явно закрывать ресурсы (например, InputStream)? Почему сборщик мусора не делает это автоматически?

Вопрос объясняет необходимость ручного управления ресурсами и ограничения сборщика мусора.

Короткий ответ

Ресурсы (файлы, соединения) требуют явного закрытия, чтобы освободить системные ресурсы (память, дескрипторы). Сборщик мусора не гарантирует своевременное удаление, так как работает с памятью JVM, а не с внешними ресурсами.

Длинный ответ

  1. Проблема утечки ресурсов:

    • Открытые файлы или соединения блокируют системные дескрипторы.

    • Если их не закрыть, приложение может исчерпать лимиты ОС.

  2. Сборщик мусора:

    • Удаляет только объекты в куче JVM.

    • Не управляет внешними ресурсами (например, файловыми дескрипторами).

Решение:

  • Используйте try-with-resources (Java 7+):

    try (InputStream is = new FileInputStream("file.txt")) {
        // Чтение файла
    } // Автоматическое закрытие

Когда использовать:

  • Всегда для работы с файлами, сетевыми соединениями, БД.

Уровень

  • Рейтинг:

    1

  • Сложность:

    7

Навыки

  • Java

    Java

Ключевые слова

#resource management

#garbage collector

Подпишись на Java Developer в телеграм