Ответ
Сборщики мусора (GC) в JVM управляют автоматическим освобождением памяти. Выбор GC зависит от требований к пропускной способности (throughput) и задержкам (latency).
Основные сборщики:
| Сборщик | Ключевая характеристика | Флаг JVM | Сценарий использования |
|---|---|---|---|
| Serial GC | Однопоточный, Stop-The-World паузы. | -XX:+UseSerialGC |
Клиентские приложения с малой кучей. |
| Parallel GC (Throughput) | Многопоточный, оптимизирован для пропускной способности. | -XX:+UseParallelGC |
Фоновые задачи, где важна общая производительность, а не паузы. |
| CMS (Concurrent Mark Sweep) | Старался минимизировать паузы, работая параллельно с приложением. Устарел и удален в новых JDK. | -XX:+UseConcMarkSweepGC (до JDK 9/14) |
Устаревшие приложения, чувствительные к паузам. |
| G1 (Garbage-First) | Поколенный, региональный сборщик, балансирующий между пропускной способностью и паузами. GC по умолчанию с JDK 9+. | -XX:+UseG1GC |
Универсальный выбор для большинства серверных приложений. |
| ZGC (Z Garbage Collector) | Низколатентный, паузы обычно < 10 мс, масштабируется на терабайтные кучи. | -XX:+UseZGC |
Приложения, критичные к задержкам (финансовые транзакции, real-time системы). |
| Shenandoah | Низколатентный, как ZGC, но с другим алгоритмом. Основная работа по сборке мусора выполняется конкурентно с приложением. | -XX:+UseShenandoahGC |
Аналогично ZGC, часто в OpenJDK-дистрибутивах (Red Hat). |
Пример настройки G1 для баланса производительности и пауз:
java -XX:+UseG1GC -Xmx4g -Xms4g -XX:MaxGCPauseMillis=200 -jar myapp.jar
-XX:+UseG1GC— включает G1.-Xmx4g -Xms4g— задает начальный и максимальный размер кучи.-XX:MaxGCPauseMillis=200— целевое время паузы (миллисекунды).