openjdk.ruOpenJDK на русском

JEP 307: Parallel Full GC for G1

Параллельная полная сборка мусора для G1

ОтветственныйStefan Johansson
ТипFeature
ОбластьImplementation
СтатусClosed / Delivered
Выпуск10
Компонентhotspot / gc
Обсуждение hotspot dash gc dash dev at openjdk dot java dot net
ТрудоёмкостьM
ДлительностьM
РецензентыMikael Vidstedt
ОдобренMikael Vidstedt
Создан2017/01/17 11:40
Обновлён2018/03/29 07:39
Задача8172890

Аннотация

Сократить задержки G1 в худшем случае, сделав полную сборку мусора параллельной.

Что не является целью

Добиться для всех сценариев использования такой же производительности, как у полной сборки мусора в Parallel GC.

Мотивация

В JDK 9 сборщик мусора G1 стал сборщиком по умолчанию. У прежнего сборщика по умолчанию, Parallel GC, полная сборка мусора параллельная. Чтобы как можно меньше повлиять на пользователей, у которых происходят полные сборки мусора, полную сборку мусора в G1 тоже следует сделать параллельной.

Описание

Сборщик мусора G1 спроектирован так, чтобы избегать полных сборок, но если конкурентные сборки не успевают освобождать память достаточно быстро, в качестве запасного варианта выполняется полная сборка мусора. Текущая реализация полной сборки мусора в G1 использует однопоточный алгоритм mark-sweep-compact. Мы намерены распараллелить алгоритм mark-sweep-compact и использовать то же число потоков, что и сборки Young и Mixed. Число потоков можно задать параметром -XX:ParallelGCThreads, но это также повлияет на число потоков, используемых для сборок Young и Mixed.

Тестирование

  • Анализ времени полной сборки мусора, чтобы убедиться, что это время сократилось. Результатов бенчмарков, вероятно, будет недостаточно, поскольку G1 спроектирован так, чтобы избегать полных сборок мусора.

  • Анализ выполнения с помощью VTune или Solaris Studio Performance Analyzer для поиска лишних узких мест.

Риски и допущения

  • Работа основана на допущении, что ничто в базовой архитектуре G1 не препятствует параллельной полной сборке мусора.

  • Из-за того что G1 использует регионы, после параллельной полной сборки мусора, скорее всего, будет оставаться больше неиспользуемого пространства, чем после однопоточной.