Есть ли приоритеты у сборщика мусора

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

Ответ

Да, у сборщика мусора (GC) в Android есть приоритеты. Он использует generational garbage collection, разделяя объекты на поколения:

  1. Young generation – краткоживущие объекты (например, локальные переменные). Собираются часто (Minor GC).
  2. Old generation – долгоживущие объекты. Собираются реже (Major GC).
  3. Permanent generation – метаданные классов (в ART заменен на метапространство).

Приоритеты:

  • GC старается минимизировать паузы (stop-the-world), особенно в основном потоке.
  • Объекты с SoftReference удаляются перед OutOfMemoryError.
  • WeakReference и PhantomReference имеют более высокий приоритет на удаление.

Пример:

val weakRef = WeakReference(MyObject())
// GC удалит MyObject при нехватке памяти