Ответ
Garbage Collector (GC) в Android (через ART/Dalvik) теряет ссылки на объекты, когда они больше не достижимы из активных корневых точек (например, статических полей, активных потоков, стеков вызовов). Основные сценарии:
- Обнуление ссылок:
var obj = MyObject()
obj = null // GC соберет MyObject
- Выход из области видимости:
fun createTemp() {
val temp = Temporary()
// temp становится недостижимым после return
}
- Циклические ссылки без внешних связей:
class Node {
var next: Node? = null
}
val a = Node()
val b = Node()
a.next = b
b.next = a
a = null
b = null // Оба объекта будут собраны, несмотря на циклическую ссылку
GC использует алгоритм mark-and-sweep: сначала помечает достижимые объекты, затем удаляет все непомеченные. WeakReference/SoftReference могут специально "ослаблять" ссылки для более гибкого управления памятью.