Перейти к основному содержимому

Что такое утечка памяти и как она образуется?

Утечка памяти (memory leak) — это когда программа выделяет память для хранения данных, но не освобождает её после того, как данные перестают быть нужны, что приводит к её «потере» для системы и постепенному исчерпанию свободной памяти. Образуется из-за ошибок в коде, когда остаются «висячие» ссылки на объекты, которые должны были быть удалены, мешая сборщику мусора или ручному менеджеру памяти очистить ресурсы, что замедляет работу и может привести к краху программы.

Причины образования

  • Неправильное управление памятью (в языках без автоматической сборки мусора):

  • Статические поля: Объекты, на которые ссылаются статические переменные, не будут удалены, пока программа работает.

  • Закрытые слушатели (listeners) и обработчики событий: Если зарегистрировать слушатель и не отписаться, он будет удерживать ссылку на объект.

  • Внутренние классы (в Java): Нестатический внутренний класс неявно содержит ссылку на внешний класс.

  • Кэши: Неограниченное накопление объектов в кэше без механизма их очистки.

  • Таймеры: Таймеры, которые не были остановлены, могут удерживать ссылки.

  • Ошибки в коде