Ответ
SoftReference - объект удаляется GC, когда заканчивается память. Подходит для кэширования.
WeakReference - объект удаляется при следующем GC, даже если памяти достаточно. Используется для слушателей, временных данных.
PhantomReference - объект уже удален, но позволяет выполнить финализацию перед реальным освобождением памяти.
Пример:
// SoftReference - для кэша
SoftReference<Bitmap> softCache = new SoftReference<>(bitmap);
// WeakReference - для слушателей
WeakReference<Listener> weakListener = new WeakReference<>(listener);
// PhantomReference - для финализации
ReferenceQueue<Object> queue = new ReferenceQueue<>();
PhantomReference<Object> phantomRef = new PhantomReference<>(obj, queue);