Вопрос проверяет знание основных реализаций GC в JVM и понимание их различий и области применения.
В JVM существует несколько реализаций сборщиков мусора.
Они отличаются по задержкам, пропускной способности и сложности.
Выбор GC зависит от типа нагрузки и требований к паузам.
Нет универсального сборщика для всех случаев.
JVM предоставляет несколько сборщиков мусора, каждый из которых оптимизирован под свои сценарии.
Serial GC
Работает в одном потоке
Прост и предсказуем
Подходит для небольших приложений
Parallel GC
Использует несколько потоков
Ориентирован на пропускную способность
Часто используется по умолчанию в старых версиях JVM
CMS (Concurrent Mark Sweep)
Минимизирует паузы
Работает параллельно с приложением
Устарел и удален в новых версиях JVM
G1 GC
Делит heap на регионы
Предсказуемые паузы
Часто используется по умолчанию в современных JVM
ZGC
Почти без пауз
Подходит для больших heap
Использует colored pointers
При выборе учитывают:
Размер heap
Допустимые паузы
Тип нагрузки
Версию JVM
Выбор GC — это компромисс между паузами и пропускной способностью.
Правильный сборщик подбирается под конкретный сценарий.