Возможна ли утечка памяти в Java при наличии GC?

Да. GC освобождает недостижимые объекты, но не понимает, какие достижимые объекты уже бесполезны приложению. Неограниченный cache или забытый listener может удерживать память бесконечно.

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

Что ответить на собеседовании

Да. GC освобождает недостижимые объекты, но не понимает, какие достижимые объекты уже бесполезны приложению. Неограниченный cache или забытый listener может удерживать память бесконечно.

Подробный разбор

Ответ с пояснениями

Да. GC освобождает недостижимые объекты, но не понимает, какие достижимые объекты уже бесполезны приложению. Неограниченный cache или забытый listener может удерживать память бесконечно.

Типичные причины — static-коллекции, ThreadLocal в долгоживущих потоках, подписки и очереди без лимита. Сравнивают heap dumps, retained size и пути к GC roots, а не только общий расход RAM. Также возможны утечки native-ресурсов вне heap. Исправление устраняет удерживающую ссылку или вводит управляемый жизненный цикл.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее