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 использует регионы, после параллельной полной сборки мусора, скорее всего, будет оставаться больше неиспользуемого пространства, чем после однопоточной.