G1 хорошо объясняется также в этом новом сеансе JavaOne 2012: Настройка производительности сборщика мусора G1 [ youtube ], [ PDF ].
Они начинают с введения CMS и G1, их сравнения, а затем объясняются анализ и настройка G1.
G1 характеристики
- Области фиксированного размера - куча разделена на области (1 МБ - 32 МБ, ~ 2000, определяется виртуальной машиной).
- Eden, оставшийся в живых и OldGen, представленный как логический набор областей .
- Живые объекты эвакуированы из одного региона в другой
Типичная куча G1 может выглядеть так:
![A typical G1 heap may look like:](https://i.stack.imgur.com/oJkeU.png)
Вот сводка каждой фазы G1:
1. Молодая коллекция
1.1 Молодая фаза - Незначительный GC
- Эвакуация - Параллельный второстепенный ГК Stop-The-World, в котором живые объекты эвакуируются из Молодого поколения либо в регионы выживших (владение) или в районы Старого поколения (повышение).
- Бухгалтерия - размер пространства eden / Survivor для следующего молодого GC определяется на основе статистики по каждому региону и на основе времени паузы, установленного приложением. G1 оценивает, сколько времени потребуется для следующего YoungGC.
- Изменение размера - G1 теперь может легко уменьшать / изменять размеры областей рендеринга / выживания.
1,2 Янг / Начальная отметка
- GC young initial-mark - начальная фаза маркировки для коллекции OldGen, которая выполняется параллельно с коллекцией YoungGC. Начальная отметка - это параллельный параллельный процесс маркировки.
2. Коллекция Old Gen
2,1 Начальная отметка - см. 1.2. * * 1068
2.2 GC примечание
- одна пауза "остановка мира", одновременная маркировка живых объектов
- учет - для каждого региона, во время замечания, G1 отслеживает ливни региона (сколько объектов живет в каждом регионе) и ссылается на регион ( Remembered Set ) - это говорит G1, сколько времени занимает сбор данных в этом регионе.
- Пустые регионы восстановлены
2,3. GC пауза (смешанная)
- выберите регионы с низкой живостью и соберите некоторые из них. Следовательно, мы собираем «мусор в первую очередь».
- фактический сбор этих регионов выполняется одновременно со следующим GC Young, поэтому нет отдельной паузы для сбора OldGen. Следовательно, GC pause (mixed) представляет собой смешанную коллекцию YoungGen и часть старого Gen.
- В конце паузы GC (смешанная) в старых областях генов может остаться немного мусора, который будет собираться позже в зависимости от будущей активности, времени паузы и количества неиспользованных областей.
3. Полный GC
Обратите внимание, что G1 предназначен, чтобы максимально избежать Full GC. Начиная с Java 7u40, паузы FullGC в G1 не оптимизируются и реализуются как однопоточная операция. При использовании G1 старайтесь избегать Full GC - если вы видите какие-либо паузы FullGC, ваша настройка GC, вероятно, требует некоторой настройки.
Ресурсы