Ответ
В Java есть два типа ссылок: сильные (strong) и слабые (weak, soft, phantom).
Сильные ссылки - обычные ссылки через new. Объект не будет удален сборщиком мусора, пока на него есть сильная ссылка:
Object obj = new Object(); // сильная ссылка
Слабые ссылки:
WeakReference- объект удалится при нехватке памяти, даже если ссылка существует
WeakReference<Object> weakRef = new WeakReference<>(new Object());
-
SoftReference- удалится только при критической нехватке памяти -
PhantomReference- используется для финализации, всегда возвращает null
Основное применение слабых ссылок - кеширование, listeners, избежание утечек памяти.