Similar presentations:
Osnovy-raboty-Java-Garbage-Collector-GC
1.
Основы работы JavaGarbage 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.
Региональная Структура Кучи G1G1 не использует строго разделенные 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
под конкретные рабочие нагрузки.
programming