Да. GC освобождает недостижимые объекты, но не понимает, какие достижимые объекты уже бесполезны приложению. Неограниченный cache или забытый listener может удерживать память бесконечно.
Возможна ли утечка памяти в Java при наличии GC?
Да. GC освобождает недостижимые объекты, но не понимает, какие достижимые объекты уже бесполезны приложению. Неограниченный cache или забытый listener может удерживать память бесконечно.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Да. GC освобождает недостижимые объекты, но не понимает, какие достижимые объекты уже бесполезны приложению. Неограниченный cache или забытый listener может удерживать память бесконечно.
Типичные причины — static-коллекции, ThreadLocal в долгоживущих потоках, подписки и очереди без лимита. Сравнивают heap dumps, retained size и пути к GC roots, а не только общий расход RAM. Также возможны утечки native-ресурсов вне heap. Исправление устраняет удерживающую ссылку или вводит управляемый жизненный цикл.