Ответ
В Android (JVM) объекты хранятся в куче (Heap), которая разделена на области:
- Young Generation (Eden, Survivor 0/1) – новые объекты
- Old Generation – долгоживущие объекты
- Permanent Generation (метаданные классов, устарело в новых версиях)
При нехватке памяти GC удаляет недостижимые объекты. Пример утечки:
class LeakyActivity : Activity() {
private val leak = staticList // static держит ссылку на Activity
companion object {
val staticList = mutableListOf<Any>()
}
}
Key моменты:
- Объекты создаются в Young Gen, пережившие сборки перемещаются в Old Gen
- OutOfMemoryError – куча переполнена
- Weak/SoftReference – управление жизненным циклом вручную