Встречается на собеседованиях • сегодня

Почему возникает утечка памяти

Утечка памяти в Java возникает, когда объекты больше не используются, но остаются достижимыми из-за ошибочных ссылок. Основные причины: 1. **Статические коллекции** – объекты, добавленные в статический `Map` или `List`, не удаляются сборщиком мусора, даже если больше не нужны. ```java static List cache = new ArrayList<>(); void addToCache(Object obj) { cache.add(obj); // Утечка, если не очищать } ``` 2. **Незакрытые ресурсы** – `InputStream`, `Connection`, `File` и другие ресурсы, не закрытые через `close()` или `try-with-resources`. 3. **Слушатели событий** – если объект регистрируется как слушатель, но не удаляется. 4. **ThreadLocal переменные** – если потоки завершают работу, но значения остаются в `ThreadLocal`. 5. **Внутренние классы** – нестатические внутренние классы хранят ссылку на внешний класс. Для предотвращения: - Используйте `WeakReference` для кешей. - Закрывайте ресурсы в `finally` или `try-with-resources`. - Удаляйте слушатели при уничтожении объекта. - Очищайте `ThreadLocal` после использования.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы