Что такое утечка памяти и как она образуется?
Утечка памяти (memory leak) — это когда программа выделяет память для хранения данных, но не освобождает её после того, как данные перестают быть нужны, что приводит к её «потере» для системы и постепенному исчерпанию свободной памяти. Образуется из-за ошибок в коде, когда остаются «висячие» ссылки на объекты, которые должны были быть удалены, мешая сборщику мусора или ручному менеджеру памяти очистить ресурсы, что замедляет работу и может привести к краху программы.
Причины образования
-
Неправильное управление памятью (в языках без автоматической сборки мусора):
-
Статические поля: Объекты, на которые ссылаются статические переменные, не будут удалены, пока программа работает.
-
Закрытые слушатели (listeners) и обработчики событий: Если зарегистрировать слушатель и не отписаться, он будет удерживать ссылку на объект.
-
Внутренние классы (в Java): Нестатический внутренний класс неявно содержит ссылку на внешний класс.
-
Кэши: Неограниченное накопление объектов в кэше без механизма их очистки.
-
Таймеры: Таймеры, которые не были остановлены, могут удерживать ссылки.
-
Ошибки в коде