13.57M
Категория: ПрограммированиеПрограммирование

Osnovy-raboty-Java-Garbage-Collector-GC

1.

Основы работы Java
Garbage Collector (GC)
Понимание принципов работы сборщика мусора в JVM критически
важно для высокопроизводительных Java-приложений. Мы
рассмотрим общие концепции, структуру памяти и углубимся в
особенности Garbage-First (G1) GC.

2.

Архитектура Сборщика Мусора (GC)
Автоматическое
Управление Памятью
Снижение Утечек Памяти
Паузы "Stop-the-World"
Снижает риск утечек памяти, хотя
Во время сборки мусора часто
GC автоматически освобождает
не может полностью исключить
возникает пауза (Stop-the-World),
память, занятую объектами, на
их, особенно при наличии
когда все потоки приложения
которые больше нет ссылок,
"ложных" сильных ссылок.
приостанавливаются. Цель
избавляя разработчиков от
современных GC —
ручного управления.
минимизировать длительность
этих пауз.

3.

Структура Heap-памяти: Поколения
Куча (Heap) делится на области для оптимизации сборки мусора. Это основа концепции генерационной сборки мусора.
Tenured/Old Generation (Старое)
Young Generation (Молодое)
Здесь создаются все новые объекты.
Объекты, пережившие несколько
Объекты, которые выживают после
сборок в Молодом поколении (или
нескольких циклов сборки,
перемещаются дальше.
очень большие объекты),
перемещаются сюда. Сборка здесь
происходит реже.
Survivor Spaces (S0 и S1)
Eden Space
Области, куда перемещаются
Основная зона создания новых
выжившие после Minor GC объекты.
Они играют ключевую роль в
определении долгоживущих объектов.
объектов в Молодом поколении. Когда
Eden заполняется, происходит Minor
GC.

4.

Survivor Spaces: Роль Двойного Буфера
Наличие двух зон Survivor (S0 и S1) необходимо для эффективной инкрементальной дефрагментации и предотвращения копирования объектов обратно в Eden.
Создание в Eden
Новые объекты создаются в Eden. При Minor GC выжившие объекты копируются.
Копирование в S0 (To Space)
Выжившие объекты из Eden и S1 (From Space) копируются в S0 (которое на этом цикле
пустое).
Смена Ролей
После копирования S0 становится From Space, а S1 — To Space. Процесс повторяется,
обеспечивая очистку и дефрагментацию.

5.

Что такое GC Root?
GC Roots — это набор объектов, которые считаются безусловно
доступными и служат точками отсчета для определения "живых"
объектов в куче. Все, что достижимо по ссылкам от GC Roots,
считается живым; остальное — мусор.

6.

Ключевые Типы GC Roots (GC Root Set)
Активные Потоки
Статические Переменные
Локальные переменные и параметры методов,
Объекты, на которые ссылаются статические поля
находящиеся в стеке потоков (Thread Stacks).
классов (классы, загруженные в Classloader).
JNI Ссылки
Мониторы/Синхронизация
Ссылки на объекты, созданные или используемые
Объекты, используемые для синхронизации (например,
нативным кодом через Java Native Interface.
заблокированные мониторы).

7.

Garbage-First (G1) GC: Основная Цель
G1 GC был представлен для замены CMS (Concurrent Mark Sweep) и нацелен на обеспечение предсказуемых, мягких пауз
(Soft Real-Time) даже при работе с очень большими кучами (до 100 ГБ и более).
Мягкие Паузы
Региональный Подход
Главное отличие: G1 позволяет
Параллельная Сборка
Большая часть работы
пользователю задавать целевое
Вместо фиксированных
(маркировка) выполняется
максимальное время паузы
поколений, G1 делит всю кучу на
одновременно с работающим
(например, 200 мс), которое он
регионы одинакового размера
приложением (concurrently),
старается не превышать.
(например, 1-32 МБ).
минимизируя влияние на
производительность.

8.

Региональная Структура Кучи G1
G1 не использует строго разделенные Young, Old и Permanent Generations. Вместо этого, вся куча делится на множество регионов.
Survivor
Old
Eden
Humongous

9.

Особенности G1: Инкрементальная Сборка и RSet
Инкрементальная Сборка
Remembered Sets (RSet)
G1 выбирает для сборки только те регионы (в основном Old),
Каждый регион имеет свой RSet. RSet отслеживает ссылки,
которые содержат наибольшее количество "мусора" — отсюда
входящие в регион извне. Это позволяет G1 собирать мусор в
и название Garbage-First. Это позволяет избежать Full GC.
одном регионе (Minor GC) без сканирования всей огромной
Процесс маркировки (Marking Phase) разделен на фазы, часть
из которых выполняется параллельно с приложением.
кучи, что является ключевой особенностью для сокращения
пауз.

10.

Резюме и Ключевые Выводы
1
2
3
GC Roots
Survivor Spaces
G1 GC
Точки отсчета, определяющие
Два пространства (S0/S1) для
Ориентирован на предсказуемые
доступность объектов (стеки, статики,
эффективного промоушена
короткие паузы за счет регионального
JNI).
долгоживущих объектов.
подхода и RSet.
Для достижения оптимальной производительности в Java-приложениях требуется тонкая настройка параметров G1 GC
под конкретные рабочие нагрузки.
English     Русский Правила