Ответ
Да, поток может быть корнем для сборщика мусора (GC). В Android/Java потоки всегда считаются активными корнями GC, пока они выполняются. Это означает, что все объекты, доступные из стека потока (например, локальные переменные), не будут собраны GC.
Пример:
fun startThread() {
val heavyObject = HeavyObject() // Не будет собран, пока поток жив
thread {
heavyObject.doWork() // Используем heavyObject в потоке
Thread.sleep(1000)
}
}
Важные нюансы:
- Поток должен быть запущен (не просто создан)
- Объекты в стеке потока защищены от GC
- После завершения потока связанные объекты могут быть собраны
- Анонимные классы (Runnable) также удерживают ссылки на внешние объекты