Что такое утечка памяти

«Что такое утечка памяти» — вопрос из категории Управление памятью, который задают на 32% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Утечка памяти (memory leak) — ситуация, когда объект больше не используется, но не освобождается сборщиком мусора (GC), потому что на него остаётся ссылка. В Android чаще всего возникает из-за:

  1. Ссылки на Activity/Fragment в статическом поле или синглтоне
  2. Неотписанные подписки (RxJava, LiveData)
  3. Использование Context неверного типа (Application vs Activity)
  4. Анонимные классы (например, Handler/Runnable)

Пример утечки:

class LeakyActivity : AppCompatActivity() {
    companion object {
        var leakedContext: Context? = null
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        leakedContext = this // Утечка! Static хранит ссылку на Activity
    }
}

Для поиска утечек используйте LeakCanary или Android Profiler.