Вопрос объясняет необходимость ручного управления ресурсами и ограничения сборщика мусора.
Ресурсы (файлы, соединения) требуют явного закрытия, чтобы освободить системные ресурсы (память, дескрипторы). Сборщик мусора не гарантирует своевременное удаление, так как работает с памятью JVM, а не с внешними ресурсами.
Проблема утечки ресурсов:
Открытые файлы или соединения блокируют системные дескрипторы.
Если их не закрыть, приложение может исчерпать лимиты ОС.
Сборщик мусора:
Удаляет только объекты в куче JVM.
Не управляет внешними ресурсами (например, файловыми дескрипторами).
Решение:
Используйте try-with-resources (Java 7+):
try (InputStream is = new FileInputStream("file.txt")) {
// Чтение файла
} // Автоматическое закрытиеКогда использовать:
Всегда для работы с файлами, сетевыми соединениями, БД.