В чем разница между ссылками в Java

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

Ответ

В Java есть два типа ссылок: сильные (strong) и слабые (weak, soft, phantom).

Сильные ссылки - обычные ссылки через new. Объект не будет удален сборщиком мусора, пока на него есть сильная ссылка:

Object obj = new Object(); // сильная ссылка

Слабые ссылки:

  1. WeakReference - объект удалится при нехватке памяти, даже если ссылка существует
WeakReference<Object> weakRef = new WeakReference<>(new Object());
  1. SoftReference - удалится только при критической нехватке памяти

  2. PhantomReference - используется для финализации, всегда возвращает null

Основное применение слабых ссылок - кеширование, listeners, избежание утечек памяти.