Что такое утечки памяти? Как найти?

Утечки памяти (Memory Leaks) — это ситуации, когда приложение не освобождает используемую память после её использования, что со временем может привести к замедлению работы, падениям или повышенному потреблению ресурсов.


1. Что вызывает утечки памяти

  • Неправильное управление объектами

    • Ссылки на объекты остаются в памяти, хотя они больше не нужны.

  • Замыкания и анонимные классы (Java/Kotlin)

    • Сохраняют ссылку на Activity или Context.

  • Слушатели и колбэки

    • Не удаляются после закрытия экрана.

  • Неправильное использование коллекций

    • Добавление объектов в глобальные списки или кэши без очистки.


2. Как найти утечки памяти

Для Android

  1. Android Studio Profiler

    • Инструмент для анализа использования памяти в реальном времени.

    • Позволяет увидеть: текущие объекты в памяти, объём памяти, GC (garbage collection).

  2. LeakCanary

    • Библиотека, автоматически отслеживающая утечки Activity и Fragment.

    • Показывает стек вызовов, где объект удерживается.

  3. Heap Dumps

    • Снимаем снимок кучи памяти (heap dump) через Android Studio.

    • Анализируем объекты, которые не были очищены.

Для iOS

  1. Xcode Instruments → Leaks

    • Позволяет выявить объекты, которые не освобождаются.

  2. Memory Graph Debugger

    • Визуализация связей объектов и удерживающих ссылок.


3. Симптомы утечки памяти

  • Постепенное увеличение потребления памяти при использовании приложения.

  • Замедление работы или зависания.

  • Частые сбои с ошибкой OutOfMemoryError (Android) или EXC_BAD_ACCESS (iOS).


4. Как предотвратить утечки

  • Использовать слабые ссылки (WeakReference) для слушателей и колбэков.

  • Отписываться от слушателей при уничтожении Activity/Fragment.

  • Очистка кэшей и коллекций.

  • Использовать современные библиотеки управления жизненным циклом (LiveData, ViewModel).


Итог: утечки памяти — это объекты, которые остаются в памяти после завершения работы, и их находят с помощью профилировщиков, heap dumps, LeakCanary (Android) или Instruments (iOS).

Last updated

Was this helpful?