Ответ
В Java есть 4 типа ссылок, управляемых сборщиком мусора (GC):
- Strong Reference - обычная ссылка, объект не будет удалён, пока на него есть strong-ссылки
Object obj = new Object(); // strong reference
- Soft Reference - объект удаляется только при нехватке памяти. Полезно для кэшей
SoftReference<Object> softRef = new SoftReference<>(obj);
- Weak Reference - объект удаляется при следующем проходе GC
WeakReference<Object> weakRef = new WeakReference<>(obj);
- Phantom Reference - позволяет узнать, что объект был удалён (используется для cleanup-операций)
PhantomReference<Object> phantomRef = new PhantomReference<>(obj, queue);
Все кроме Strong находятся в пакете java.lang.ref. Разные типы ссылок позволяют гибко управлять жизненным циклом объектов и памятью.