Может ли сборщик мусора собрать висящую подписку

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

Ответ

Да, сборщик мусора (GC) может собрать объект с висящей подпиской, если на него больше нет сильных ссылок. Однако это может привести к утечкам памяти, если подписка не отписана.

Пример с RxJava:

val disposable = Observable.interval(1, TimeUnit.SECONDS)
    .subscribe { /* обработка */ }

// Если disposable не сохранить и не отписаться, 
// поток продолжит работать, но GC может собрать его, 
// когда на него не будет ссылок

Рекомендации:

  • Всегда отписывайтесь от подписок (Disposable.dispose(), CompositeDisposable)
  • Используйте WeakReference для подписок, если нужно автоматическое освобождение
  • Для жизненного цикла Android используйте Lifecycle-aware компоненты (AutoDispose)