Перейти к основному содержимому

Руководство по корням сборщика мусора

· 3 мин. чтения

1. Обзор

В этом уроке мы узнаем, что такое корни сборщика мусора (корни GC). Кроме того, мы опишем типы корней GC. После этого мы покажем разницу между корнями GC и живыми объектами.

2. Определение корня GC

Давайте сначала определим, что такое корни GC. Корень GC — это термин, используемый в контексте сборки мусора в Java. Это специальные объекты для сборщика мусора. Как следует из названия, корни GC являются отправными точками для процессов сборщика мусора. Как правило, все объекты, на которые прямо или косвенно ссылаются из корня сборщика мусора, не удаляются сборщиком мусора.

3. Типы корней GC

Давайте рассмотрим основные типы GC Roots:

  • Класс: классы, загруженные системным загрузчиком классов; также содержит ссылки на статические переменные
  • Локальный стек: локальные переменные и параметры для методов, хранящихся в локальном стеке.
  • Активные потоки Java: все активные потоки Java.
  • Ссылки JNI: объекты Java собственного кода, созданные для вызовов JNI; содержит локальные переменные, параметры для методов JNI и глобальные ссылки JNI

Кроме того, есть еще несколько возможных типов GC Roots:

  • Объекты, используемые в качестве мониторов для синхронизации
  • Конкретные объекты, определенные реализацией JVM, которые не собираются мусором по своему назначению. Это может содержать важные классы исключений, загрузчики системных классов или пользовательские загрузчики классов.

Кроме того, для каждой JVM нет документации о том, какие конкретные объекты являются корнями сборщика мусора . Некоторые из популярных Java IDE предоставляют функциональные возможности для анализа памяти с точки зрения корней сборщика мусора. Это полезно при анализе утечек памяти в приложении.

4. Корни GC против живых объектов

Давайте теперь посмотрим на живые объекты, определенные в процессе сборки мусора.

Все объекты, активно используемые приложением, являются активными объектами для GC . Кроме того, сборщик мусора не удаляет живые объекты. Корни GC — это особый тип живого объекта. Следовательно , все корни GC являются живыми объектами по определению.

5. Использование сборщиком мусора корней GC

Давайте теперь посмотрим на использование GC Roots в процессе сборки мусора.

Собственно говоря, все реализации GC в HotSpot JVM — это трассирующие сборщики . GC идентифицирует все живые объекты, просматривая граф объектов. Кроме того, объекты, посещенные и отмеченные как активные, не будут удалены сборщиком мусора. Чтобы иметь возможность перемещаться по графу, необходимы начальные точки. Таким образом, корни GC являются отправными точками для трассировки коллекторов .

Сборщик мусора начинает обход графа с корня и помечает все посещенные объекты в графе как живые. Процесс выполняется для каждого корня GC, определенного в приложении. Более того, он обрабатывает все графы, начиная со всех корней GC. Затем он помечает все посещенные объекты как живые. После этого все объекты, которые не были посещены, удаляются сборщиком мусора.

6. Заключение

В этой короткой статье мы объяснили, что такое корни GC. Затем мы описали типы корней GC. Далее мы показали разницу между корнями GC и живыми объектами. Наконец, мы объяснили использование корней GC в процессе сборки мусора.