codefest 2012. Иванов В. — g1: новый сборщик мусора в hotspot jvm
DESCRIPTION
TRANSCRIPT
1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
2 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1GC: Garbage-First Garbage Collector
Владимир ИвановOracle [email protected]
3 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Содержание
• Основы сборки мусора
• G1: обзор архитектуры
• Миграция на G1
4 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
GC == Сборка мусора
• Находит и освобождает место, занимаемое ненужными объектами• Объекты вне транзитивного замыкания, включающего roots
(стеки потоков, статические поля классов и т.д.)
• Автоматическая и безопасная
• Проще, если граф объектов “заморожен”• Stop-the-world (STW) паузы
• Возможны различные подходы• c дефрагментацией или без• Алгоритмы: copying, mark-sweep, mark-compact, ...• Аллокация: linear, free lists, ...
5 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Сборка мусора: до
B
Heap
C
D
G
H
IE
K
MJ
A
F
RuntimeStack
L
6 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Сборка мусора: после
B
Heap
C
D
G
H
IE
K
MJ
A
F
RuntimeStack
L
7 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Сборка мусора с поколениями
• Слабая гипотеза о поколениях• Большинство объектов временные• Старые объекты редко ссылаются на молодые
• Молодые и старые объекты содержатся отдельно• В пространствах, называемых “поколения” (generations)• Возможны разные алгоритмы для молодого и старого
поколения• Mолодое поколение можно собирать отдельно от старого
8 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Сборка мусора с поколениями
Молодое поколение
Старшее поколение
Перемещение объекта
Создание объектаНеобходимоотслеживать ссылки
9 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Структура молодого поколения
10 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Молодое поколение: сборка мусора
11 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Молодое поколение: сборка мусора
12 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Содержание
• Основы сборки мусора
• G1: обзор архитектуры
• Миграция на G1
13 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Garbage-First GC (G1)
• Фоновый и параллельный
• Высокая предсказуемость работы
• Сборщик мусора с поколениями, но …• «Куча» состоит из регионов• Нет физического разделения между молодым и старым
поколением• Принадлежность регионов определяется динамически• Для каждого региона известно где находятся объекты,
ссылающиеся на него• “Remembered Set”• Позволяет собирать регионы независимо
14 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Структура «кучи»
• Разбита на регионы• Фиксированного размера• 1MB-32MB
15 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Структура «кучи»
• Молодое поколение• Набор регионов
• Eden• Survivor
• Выбираются динамически
E
S
S
E
E
E
E
E
16 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Структура «кучи»
• Старое поколение• Набор регионов• Выбираются динамически
S
S
E
E
E
E
E
E
17 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Структура «кучи»
• Большие объекты• Не помещается в регион• Называются “humongous”• Находятся в наборе
смежных регионов
H
S
S
H
H
E
E
E
E
E
E
18 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
S
G1: Структура «кучи»
• Collection Set• Регионы, в которых будет
происходить GC• Все молодое поколение• Некоторые регионы из
старшего поколения• Фоновая маркировка
определяет наиболее подходящие
S
H
H
H
19 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
H
H
S
G1: Структура «кучи»
• Сборка• Копирование объектов в
регионы, помеченные как часть «To»-пространства• Survivor-регионы• Регионы из старшего
поколенияS
SH
20 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Структура «кучи»
• Reclamation• From-space larger than to-
space (hopefully!)• Compaction via copying
S
H
H
H
21 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
E
H
H
S
G1: Структура «кучи»
• RSet == Remembered Set• Информация о
местонахождении ссылок на регион
• Позволяет собирать регионы независимо
• RSet поддерживается • Из старого в молодое
поколение• Между регионами в старом
поколении
H
RS
RS
22 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Фоновая маркировка
• Периодически все живые объекты в куче помечаются• обновляет информацию о достижимости по регионам• автоматически освобождает регионы без живых объектов• разбивает циклические зависимости среди недостижимых
объектов
• Параллельная и фоновая
• Стартует автоматически по достижении пороговой занятости «кучи»
23 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Барьер на запись
• Код, исполняемый при изменении значения поля объекта с указателем• Специфичен для каждого GC• Абсолютно прозрачен для приложения
• Исполняется интерпретатором / генерируется JIT-компилятором
• Пример (для обновления card table):
a.f = x; a.f = x;card_table[index_for(&a.f)] = DIRTY_VALUE;
24 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Барьеры на запись
• 2 типа• Pre-barrier
• Сохраняет старое значение поля• Поддерживается корректность фоновой маркировки• SATB (Snapshot-At-The-Beginning)
• Post-barrier• Поддержка актуальности RSet
• Результат сохраняется в буферы, локальные для потока• В процессе фоновой сборки происходит обработка
25 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Как включить?
• -XX:+UseG1GC
• -Xms/-Xmx
• Задаваемые цели на длительность и частоту пауз• -XX:MaxGCPauseMillis=<num>• -XX:GCPauseIntervalMillis=<num>
26 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Содержание
• Основы сборки мусора
• G1: обзор архитектуры
• Миграция на G1
27 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
GCs в Hotspot JVM
PSOld PSParOld
DefNew ParNew
Tenured
GC Framework GC Interface
YoungGen
WholeHeap
Parallel / Concurrent
Serial Parallel
CMS
Serial Parallel
G1
OldGen
PScavenge
28 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
GC в Hotspot JVM
• SerialGC• последовательная сборка молодого и старого поколений
• ParallelGC• максимальный throughput• параллельная сборка молодого и старого поколений
• CMS• предсказуемость• по возможности, сборка мусора в фоновом режиме
• G1• предсказуемость• слабо подвержен фрагментации
29 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Производительность GC
• 3 характеристики• Throughput
• Объем вычислительных ресурсов, затрачиваемых на GC
• Предсказуемость• На какое время прерывается работа приложения
• Footprint• Объем используемой памяти
30 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Производительность GC
Throughput
FootprintLatency =
31 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Чем хорош Stop-The-World GC?
• Проще всего определять достижимость объектов • Граф объектов «заморожен»
• Проще всего перемещать объекты в «куче»• В процессе сборки, «куча» может находиться в
некорректном состоянии
• Но:• Приложение останавливается на все время сборки• зависит от размера «кучи» / объема живых объектов
32 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Инкрементальная сборка
• Попытка уменьшить паузы, вызванные GC, за счет• Большего количества коротких пауз• Фоновая сборка
• Требуется синхронизировать работу GC с приложением• Барьеры на чтение/запись
33 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Предсказуемость vs Throughput
• STW• Продолжительные паузы• … но никакой лишней нагрузки для потоков приложения• Максимальный throughput
• Инкрементальная сборка• Короткие паузы • Лишняя нагруза в потоках приложения• Минимальные паузы за счет снижения throughput
• “Über GC” не существует
34 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1 рекомендуется, если…
• Нужна хорошая производительность
• Минимальная настройка
• Размер «кучи» >2-4Gb
• Занятость «кучи» >50%
• Продолжительность пауз (<0.5-1s)
• Скорость создания объектов серьезно варьируется
• Фрагментация «кучи»
35 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1 НЕ рекомендуется, если
• Приложение уже работает надежно без серьезных проблем с производительностью• “If it isn't broken, don't fix it!”
• Жесткие требования на паузы <100мс
36 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Как выбирать GC?
1. ParallelGC
2. G1 DONE!
3. CMS
Паузы не устраивают
Паузы все еще не устраивают«Куча» <2Gb
Подходит? Да!
Подходит? Да!
Подходит? Да!
37 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Q&A
38 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
39 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.