Ответ
В Java (и Kotlin) есть 4 типа ссылок на объекты в Heap:
- Strong Reference - обычная ссылка, объект не будет собран GC, пока есть такая ссылка.
val obj = MyObject() // strong reference
- Soft Reference - объект будет собран GC только при нехватке памяти.
val softRef = SoftReference(MyObject())
- Weak Reference - объект может быть собран GC в любой момент.
val weakRef = WeakReference(MyObject())
- Phantom Reference - похожа на Weak, но объект уже финализирован. Используется для пост-обработки перед сборкой мусора.
WeakReference часто используют для кешей, SoftReference - для ресурсоемких объектов, PhantomReference - для точного контроля финализации.