JEP 156: G1 GC: Reduce need for full GCs
G1 GC: сокращение потребности в полных сборках мусора
| Автор | Jesper Wilhelmsson |
| Ответственный | Stefan Karlsson |
| Тип | Feature |
| Область | Implementation |
| Статус | Closed / Delivered |
| Выпуск | 8u40 |
| Компонент | hotspot / gc |
| Обсуждение | hotspot dash gc dash dev at openjdk dot java dot net |
| Трудоёмкость | S |
| Длительность | S |
| Зависит от | JEP 122: Remove the Permanent Generation |
| Рецензенты | Jon Masamitsu, Tony Printezis |
| Одобрен | Mikael Vidstedt |
| Создан | 2012/02/29 20:00 |
| Обновлён | 2015/02/26 00:02 |
| Задача | 8046146 |
Аннотация
Доработать G1 так, чтобы для выгрузки классов и других критически важных операций ему не требовались полные сборки мусора.
Описание
Цель G1 — минимизировать время пауз, не ограничивая размер кучи и объём живых данных. Для этого значительная часть работы по сборке мусора выполняется конкурентно и, кроме того, выполняется частичное уплотнение. Отказ от полных сборок мусора (_т. е. сборок stop-the-world) — одно из главных преимуществ G1.
Однако сейчас G1 выгружает классы только во время полных сборок мусора. Это создаёт серьёзную проблему для крупных приложений, которые выполняют повторное развёртывание или создают временные классы через рефлексию. Чтобы это исправить, нам нужно реализовать в G1 выгрузку классов без полной сборки мусора. В рамках этого проекта G1 будет доработан так, чтобы выгружать классы в конце циклов конкурентной разметки.
Мы также выясним, есть ли другие важные функции, которые зависят от полной сборки мусора и могут вызывать похожие проблемы в G1.
Тестирование
При тестировании нужно не забыть опробовать всевозможные ссылки на загрузчики классов. Не только обычную загрузку классов в Java, но и JNI и рефлексию. Переопределение классов тоже может задействовать этот код необычным образом.
Риски и допущения
Реализация выгрузки классов в G1 затронет ряд новых проблемных областей, для которых мы ещё не выработали окончательного решения. Один из примеров — взаимодействие выгрузки классов и «snapshot-at-the-beginning» (SATB). Эта задача может оказаться сложнее, чем мы ожидали, поэтому её трудоёмкость оценивается как средняя.
Зависимости
Этот проект не зависит напрямую от удаления постоянного поколения (JEP 122), но эта работа упростит реализацию выгрузки классов в G1, поэтому имеет смысл отложить этот проект до тех пор, пока постоянное поколение не будет удалено.