Ответ
Выбор GC зависит от целевых метрик приложения: пропускной способности (throughput), задержек (latency) или использования памяти (footprint).
Основные сборщики и их применение:
| Сборщик | Ключ запуска | Цель использования |
|---|---|---|
| Serial GC | -XX:+UseSerialGC |
Однопоточные приложения, маленькая куча (<100 МБ), клиентские программы. |
| Parallel GC | -XX:+UseParallelGC |
Максимизация пропускной способности (дефолт до Java 8). Подходит для фоновых задач, не критичных к паузам. |
| G1 GC | -XX:+UseG1GC |
Баланс пропускной способности и пауз (дефолт с Java 9+). Кучи от нескольких ГБ до десятков ГБ. |
| Z GC | -XX:+UseZGC |
Минимизация пауз (<10 мс) для очень больших куч (сотни ГБ). Требует Java 11+. |
| Shenandoah GC | -XX:+UseShenandoahGC |
Аналогичен Z GC, но с другим алгоритмом. Низкие паузы, независимо от размера кучи. |
Пример выбора и настройки G1 GC:
java -XX:+UseG1GC -Xmx4g -XX:MaxGCPauseMillis=200 -jar myapp.jar
Параметры:
-Xmx4g— максимальный размер кучи 4 ГБ.-XX:MaxGCPauseMillis=200— целевое время паузы 200 мс (рекомендация для G1).
Критерии выбора:
- Допустимая длина пауз (SLA): Для UI или real-time систем — Z/Shenandoah/G1. Для batch-обработки — Parallel.
- Размер кучи: Для больших куч (>32GB) — Z, Shenandoah или G1.
- Аппаратные ресурсы: Parallel и G1 требуют больше CPU для сокращения пауз.
Рекомендация: Начинайте с G1 (дефолтный) и настраивайте под конкретные замеры производительности.