Что может вызывать утечку памяти, если есть garbage collector?

GC освобождает недостижимые объекты, но не знает, что достижимые данные уже бесполезны. Рост кеша, глобальных коллекций, callbacks, незавершённых задач и ссылок из исключений может удерживать память.

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

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

GC освобождает недостижимые объекты, но не знает, что достижимые данные уже бесполезны. Рост кеша, глобальных коллекций, callbacks, незавершённых задач и ссылок из исключений может удерживать память.

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

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

GC освобождает недостижимые объекты, но не знает, что достижимые данные уже бесполезны. Рост кеша, глобальных коллекций, callbacks, незавершённых задач и ссылок из исключений может удерживать память.

Отдельно возможны утечки в C-расширениях и внешних ресурсах. Даже после освобождения объектов RSS не обязан сразу уменьшиться: allocator может сохранить страницы и испытывать фрагментацию. Сначала отличают рост живых объектов от удержания памяти процессом, затем сравнивают снимки и пути ссылок. Принудительный gc.collect не исправляет бесконечно растущий словарь или забытый ресурс. Для кешей и очередей задают пределы и жизненный цикл.

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

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

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

Подробнее