CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM
description
Transcript of CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM
![Page 1: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/1.jpg)
1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
![Page 2: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/2.jpg)
2 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1GC: Garbage-First Garbage Collector
Владимир ИвановOracle [email protected]
![Page 3: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/3.jpg)
3 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Содержание
• Основы сборки мусора
• G1: обзор архитектуры
• Миграция на G1
![Page 4: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/4.jpg)
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, ...
![Page 5: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/5.jpg)
5 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Сборка мусора: до
B
Heap
C
D
G
H
IE
K
MJ
A
F
RuntimeStack
L
![Page 6: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/6.jpg)
6 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Сборка мусора: после
B
Heap
C
D
G
H
IE
K
MJ
A
F
RuntimeStack
L
![Page 7: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/7.jpg)
7 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Сборка мусора с поколениями
• Слабая гипотеза о поколениях• Большинство объектов временные• Старые объекты редко ссылаются на молодые
• Молодые и старые объекты содержатся отдельно• В пространствах, называемых “поколения” (generations)• Возможны разные алгоритмы для молодого и старого
поколения• Mолодое поколение можно собирать отдельно от старого
![Page 8: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/8.jpg)
8 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Сборка мусора с поколениями
Молодое поколение
Старшее поколение
Перемещение объекта
Создание объектаНеобходимоотслеживать ссылки
![Page 9: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/9.jpg)
9 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Структура молодого поколения
![Page 10: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/10.jpg)
10 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Молодое поколение: сборка мусора
![Page 11: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/11.jpg)
11 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Молодое поколение: сборка мусора
![Page 12: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/12.jpg)
12 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Содержание
• Основы сборки мусора
• G1: обзор архитектуры
• Миграция на G1
![Page 13: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/13.jpg)
13 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Garbage-First GC (G1)
• Фоновый и параллельный
• Высокая предсказуемость работы
• Сборщик мусора с поколениями, но …• «Куча» состоит из регионов• Нет физического разделения между молодым и старым
поколением• Принадлежность регионов определяется динамически• Для каждого региона известно где находятся объекты,
ссылающиеся на него• “Remembered Set”• Позволяет собирать регионы независимо
![Page 14: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/14.jpg)
14 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Структура «кучи»
• Разбита на регионы• Фиксированного размера• 1MB-32MB
![Page 15: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/15.jpg)
15 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Структура «кучи»
• Молодое поколение• Набор регионов
• Eden• Survivor
• Выбираются динамически
E
S
S
E
E
E
E
E
![Page 16: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/16.jpg)
16 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Структура «кучи»
• Старое поколение• Набор регионов• Выбираются динамически
S
S
E
E
E
E
E
E
![Page 17: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/17.jpg)
17 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Структура «кучи»
• Большие объекты• Не помещается в регион• Называются “humongous”• Находятся в наборе
смежных регионов
H
S
S
H
H
E
E
E
E
E
E
![Page 18: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/18.jpg)
18 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
S
G1: Структура «кучи»
• Collection Set• Регионы, в которых будет
происходить GC• Все молодое поколение• Некоторые регионы из
старшего поколения• Фоновая маркировка
определяет наиболее подходящие
S
H
H
H
![Page 19: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/19.jpg)
19 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
H
H
S
G1: Структура «кучи»
• Сборка• Копирование объектов в
регионы, помеченные как часть «To»-пространства• Survivor-регионы• Регионы из старшего
поколенияS
SH
![Page 20: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/20.jpg)
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
![Page 21: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/21.jpg)
21 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
E
H
H
S
G1: Структура «кучи»
• RSet == Remembered Set• Информация о
местонахождении ссылок на регион
• Позволяет собирать регионы независимо
• RSet поддерживается • Из старого в молодое
поколение• Между регионами в старом
поколении
H
RS
RS
![Page 22: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/22.jpg)
22 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Фоновая маркировка
• Периодически все живые объекты в куче помечаются• обновляет информацию о достижимости по регионам• автоматически освобождает регионы без живых объектов• разбивает циклические зависимости среди недостижимых
объектов
• Параллельная и фоновая
• Стартует автоматически по достижении пороговой занятости «кучи»
![Page 23: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/23.jpg)
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;
![Page 24: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/24.jpg)
24 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Барьеры на запись
• 2 типа• Pre-barrier
• Сохраняет старое значение поля• Поддерживается корректность фоновой маркировки• SATB (Snapshot-At-The-Beginning)
• Post-barrier• Поддержка актуальности RSet
• Результат сохраняется в буферы, локальные для потока• В процессе фоновой сборки происходит обработка
![Page 25: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/25.jpg)
25 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Как включить?
• -XX:+UseG1GC
• -Xms/-Xmx
• Задаваемые цели на длительность и частоту пауз• -XX:MaxGCPauseMillis=<num>• -XX:GCPauseIntervalMillis=<num>
![Page 26: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/26.jpg)
26 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Содержание
• Основы сборки мусора
• G1: обзор архитектуры
• Миграция на G1
![Page 27: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/27.jpg)
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
![Page 28: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/28.jpg)
28 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
GC в Hotspot JVM
• SerialGC• последовательная сборка молодого и старого поколений
• ParallelGC• максимальный throughput• параллельная сборка молодого и старого поколений
• CMS• предсказуемость• по возможности, сборка мусора в фоновом режиме
• G1• предсказуемость• слабо подвержен фрагментации
![Page 29: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/29.jpg)
29 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Производительность GC
• 3 характеристики• Throughput
• Объем вычислительных ресурсов, затрачиваемых на GC
• Предсказуемость• На какое время прерывается работа приложения
• Footprint• Объем используемой памяти
![Page 30: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/30.jpg)
30 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Производительность GC
Throughput
FootprintLatency =
![Page 31: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/31.jpg)
31 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Чем хорош Stop-The-World GC?
• Проще всего определять достижимость объектов • Граф объектов «заморожен»
• Проще всего перемещать объекты в «куче»• В процессе сборки, «куча» может находиться в
некорректном состоянии
• Но:• Приложение останавливается на все время сборки• зависит от размера «кучи» / объема живых объектов
![Page 32: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/32.jpg)
32 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Инкрементальная сборка
• Попытка уменьшить паузы, вызванные GC, за счет• Большего количества коротких пауз• Фоновая сборка
• Требуется синхронизировать работу GC с приложением• Барьеры на чтение/запись
![Page 33: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/33.jpg)
33 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Предсказуемость vs Throughput
• STW• Продолжительные паузы• … но никакой лишней нагрузки для потоков приложения• Максимальный throughput
• Инкрементальная сборка• Короткие паузы • Лишняя нагруза в потоках приложения• Минимальные паузы за счет снижения throughput
• “Über GC” не существует
![Page 34: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/34.jpg)
34 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1 рекомендуется, если…
• Нужна хорошая производительность
• Минимальная настройка
• Размер «кучи» >2-4Gb
• Занятость «кучи» >50%
• Продолжительность пауз (<0.5-1s)
• Скорость создания объектов серьезно варьируется
• Фрагментация «кучи»
![Page 35: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/35.jpg)
35 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1 НЕ рекомендуется, если
• Приложение уже работает надежно без серьезных проблем с производительностью• “If it isn't broken, don't fix it!”
• Жесткие требования на паузы <100мс
![Page 36: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/36.jpg)
36 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Как выбирать GC?
1. ParallelGC
2. G1 DONE!
3. CMS
Паузы не устраивают
Паузы все еще не устраивают«Куча» <2Gb
Подходит? Да!
Подходит? Да!
Подходит? Да!
![Page 37: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/37.jpg)
37 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Q&A
![Page 38: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/38.jpg)
38 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
![Page 39: CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM](https://reader033.fdocuments.net/reader033/viewer/2022061201/5478ebe65906b580048b461c/html5/thumbnails/39.jpg)
39 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.