Ответ
Нет, не все. GC в Android (через ART или Dalvik) удаляет только объекты, которые больше не достижимы через цепочку ссылок.
Основные случаи, когда объекты не удаляются:
- Статические поля - живут пока живёт класс
- Активные ссылки в стэке (локальные переменные в работающих методах)
- Циклические ссылки - если объекты ссылаются друг на друга, но нет внешних ссылок на них, GC их удалит
Пример утечки:
class LeakyActivity : Activity() {
companion object {
var leakedContext: Context? = null
}
override fun onCreate() {
leakedContext = this // Утечка! Activity не сможет быть собрана GC
}
}