Какие знаешь виды ссылок в Java

«Какие знаешь виды ссылок в Java» — вопрос из категории Управление памятью, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Java есть 4 типа ссылок, управляемых сборщиком мусора (GC):

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

Все кроме Strong находятся в пакете java.lang.ref. Разные типы ссылок позволяют гибко управлять жизненным циклом объектов и памятью.