Все ли ссылки на объект гарантируют что объект не будет удален сборщиком мусора

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

Ответ

Нет, не все ссылки гарантируют, что объект не будет удален GC. В Android есть разные типы ссылок:

  1. Strong Reference - обычная ссылка (Object obj = new Object()). Гарантирует, что объект не будет собран, пока ссылка существует.

  2. WeakReference - слабая ссылка, не препятствует сборке мусора:

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

  2. PhantomReference - фантомная ссылка, используется для финализации.

Пример утечки:

// Утечка памяти - статическое поле держит strong reference
static Object leakingObject = new Object(); 

Для управления жизненным циклом в Android рекомендуется использовать WeakReference для обработчиков, слушателей и контекстов.