K
Kotlin | Вопросы собесов
@easy_kotlin2.5K подп.
536просмотров
21.4%от подписчиков
21 марта 2026 г.
questionScore: 590
🤔 Как сборщик мусора понимает что обьект можно уничтожить? Сборщик мусора (Garbage Collector, GC) в Android (и в JVM) использует анализ ссылок для определения, можно ли уничтожить объект. 🚩Объект считается "мёртвым", если на него нет доступных ссылок GC работает по принципу "сборки мусора с поиском корней" (Tracing Garbage Collection). GC ищет "корневые" объекты (Root Objects) – это объекты, к которым точно есть ссылка (например, статические переменные, локальные переменные текущего потока, объекты в стеке). GC обходит все объекты, к которым есть ссылки (прямые или косвенные). Если объект не связан с корневыми объектами, он считается "мусором" и удаляется. fun main() { var user: User? = User("Alice") // Создаём объект user = null // Теперь на объект нет ссылок, GC его удалит } 🚩Сборщик мусора использует "Mark & Sweep" Метод Mark & Sweep – основной алгоритм работы GC. Mark (Пометка) – GC помечает все достижимые объекты (к которым есть ссылки). Sweep (Очистка) – GC удаляет непомеченные объекты (на которые нет ссылок). Root → A → B → C Недостижимые объекты (GC их удаляет) Root → A → B (C больше недоступен) C (GC удалит!) 🚩"Сборка поколений" (Generational GC) Объекты делятся на молодые (Young) и старые (Old) Young Generation – новые объекты (большинство умирает быстро). Old Generation – "долго живущие" объекты (Activity, Singleton). 🚩Что GC НЕ удаляет? (Memory Leaks) Утечки памяти (Memory Leaks) происходят, если на объект осталась ссылка, но он больше не нужен. class Activity { var button: Button? = null } var activity: Activity? = Activity() // Создаём объект activity?.button = Button() // Button ссылается на Activity activity = null // Activity нельзя удалить из-за ссылки на кнопку! Ставь 👍 и забирай 📚 Базу знаний
536
просмотров
1827
символов
Да
эмодзи
Нет
медиа

Другие посты @easy_kotlin

Все посты канала →
🤔 Как сборщик мусора понимает что обьект можно уничтожить? — @easy_kotlin | PostSniper