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

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

Ответ

В JVM есть несколько видов ссылок, управляемых java.lang.ref пакетом:

  1. Strong Reference – обычная ссылка, объект не удаляется GC, пока есть strong ссылки.
    Object obj = new Object(); // strong reference
  1. SoftReference – объект удаляется, только если JVM не хватает памяти.
    SoftReference<Object> softRef = new SoftReference<>(new Object());
  1. WeakReference – объект удаляется при следующем GC, даже если есть свободная память.
    WeakReference<Object> weakRef = new WeakReference<>(new Object());
  1. PhantomReference – объект удаляется, но перед этим попадает в очередь ReferenceQueue.

Используются для кэшей (Soft), слушателей (Weak) или контроля финализации (Phantom).