Ответ
В Android память управляется с помощью Dalvik/ART (до Android 5.0 — Dalvik, после — ART). Основные компоненты:
-
Heap (Куча) – хранит объекты приложения. Разделяется на:
- Young Generation (Eden, Survivor spaces) – для кратковременных объектов.
- Old Generation – для долгоживущих объектов.
-
Stack (Стек) – хранит примитивы и ссылки на объекты в куче. Каждый поток имеет свой стек.
-
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.