Все ли ссылки удаляет Garbage Collector

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

Ответ

Нет, не все. GC в Android (через ART или Dalvik) удаляет только объекты, которые больше не достижимы через цепочку ссылок.

Основные случаи, когда объекты не удаляются:

  • Статические поля - живут пока живёт класс
  • Активные ссылки в стэке (локальные переменные в работающих методах)
  • Циклические ссылки - если объекты ссылаются друг на друга, но нет внешних ссылок на них, GC их удалит

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

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

    override fun onCreate() {
        leakedContext = this // Утечка! Activity не сможет быть собрана GC
    }
}