Как устроена память в Android

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

Ответ

В Android память управляется с помощью Dalvik/ART (до Android 5.0 — Dalvik, после — ART). Основные компоненты:

  1. Heap (Куча) – хранит объекты приложения. Разделяется на:

    • Young Generation (Eden, Survivor spaces) – для кратковременных объектов.
    • Old Generation – для долгоживущих объектов.
  2. Stack (Стек) – хранит примитивы и ссылки на объекты в куче. Каждый поток имеет свой стек.

  3. Native Heap – используется NDK/C++ кодом. Управляется вручную (malloc/free).

Garbage Collector (GC) автоматически освобождает память от неиспользуемых объектов. В ART используется Generational GC с оптимизациями.

Пример утечки памяти:

class LeakyActivity : Activity() {
    private val listener = object : SomeListener {
        override fun onEvent() { /* ... */ }
    }

    override fun onCreate() {
        SomeSingleton.register(listener) // Утечка, если не отписаться!
    }
}

Профилирование: Android Studio Profiler, LeakCanary.