Получить доступ

Что относится к GC roots — корням достижимости?

MiddleJVM и сборка мусора
Коротко

Корни — точки начала обхода: локальные переменные и параметры в стеках живых потоков, статические поля загруженных классов, JNI-ссылки, сами активные потоки и удерживаемые мониторы. Всё достижимое от них живо.

  • GC не считает ссылки, циклы без связи с корнями собираются
  • Утечка в Java — объект не нужен, но достижим от корня
  • Частые каналы: статические коллекции, неотписанные слушатели, ThreadLocal в пуле

А ещё В heap dump путь к корню (path to GC roots) объясняет, кто держит объект

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Сборщик не считает ссылки, а обходит граф от корней: всё, до чего дошёл, живо, остальное — мусор. Отсюда прямое объяснение утечек в Java: объект недостижим для программиста, но остаётся достижим от корня. Самые частые каналы — статические коллекции, которые только растут; неотписанные слушатели, удерживаемые издателем; ThreadLocal в потоках пула, живущих неограниченно долго; и незакрытые ресурсы. Возраст объекта к достижимости отношения не имеет.

Что хотят услышать

  • Перечень корней.
  • Обход графа и сборка циклов.
  • Как это объясняет утечки.

Частые ошибки

  • Думать, что Java использует подсчёт ссылок — тогда циклы были бы проблемой, а при обходе от корней они не мешают.
  • Считать, что обнуления одной ссылки достаточно, если объект держит статическая коллекция.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Локальные переменные в кадрах стеков живых потоков
  • ✓Статические поля загруженных классов
  • ✓Объекты, на которые ссылаются из нативного кода через JNI
  • ✗Все объекты, созданные за последнюю секунду

Что спросят дальше

  • Почему циклические ссылки не мешают сборщику в Java?
  • Как ThreadLocal в пуле потоков приводит к утечке?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем