Какие опции по сборке мусора есть у разработчика
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Опции сборки мусора для разработчика Java
Сборка мусора (Garbage Collection) - критический аспект JVM производительности. Разработчик имеет контроль над выбором GC алгоритма и его настройками.
1. Serial GC
Самый простой и базовый сборщик мусора.
java -XX:+UseSerialGC MyApp
Характеристики:
- Один поток для сборки мусора
- Останавливает приложение (Stop-the-World pauses)
- Низкие overhead на память
- Используется на слабых машинах и тестировании
Когда использовать: single-threaded приложения, embedded системы
2. Parallel GC (Throughput Collector)
Использует несколько потоков для сборки мусора.
java -XX:+UseParallelGC -XX:ParallelGCThreads=4 MyApp
Характеристики:
- Несколько потоков (по умолчанию = кол-во CPU cores)
- Высокий throughput (пропускная способность)
- Большие pauses (milliseconds)
- По умолчанию в Java 8
Конфигурация:
java -XX:+UseParallelGC \
-XX:ParallelGCThreads=8 \
-XX:MaxGCPauseMillis=200 \
MyApp
Когда использовать: batch processing, analytical systems
3. CMS (Concurrent Mark-Sweep)
Делает сборку мусора concurrent с приложением.
java -XX:+UseConcMarkSweepGC MyApp
Характеристики:
- Low latency (короткие pauses)
- Concurrent сборка (работает параллельно с приложением)
- Может быть fragmentation
- DEPRECATED в Java 9+ (не рекомендуется)
java -XX:+UseConcMarkSweepGC \
-XX:CMSInitiatingOccupancyFraction=75 \
-XX:+UseCMSInitiatingOccupancyOnly \
MyApp
4. G1GC (Garbage First)
Современный сборщик мусора, рекомендуемый для большинства приложений.
java -XX:+UseG1GC MyApp
Характеристики:
- Разделяет heap на регионы
- Predictable pause times
- Работает с большими heap'ами (до 100GB+)
- По умолчанию в Java 9+
- Хорошо справляется с fragmentation
Конфигурация:
java -XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:G1NewSizePercent=5 \
-XX:G1MaxNewSizePercent=60 \
MyApp
Для monitoring:
java -XX:+UseG1GC \
-XX:+PrintGCDetails \
-XX:+PrintGCDateStamps \
-Xloggc:gc.log \
MyApp
5. ZGC (Z Garbage Collector)
Новый low-latency сборщик для критичных по задержкам приложений.
java -XX:+UseZGC MyApp
Характеристики:
- Ultra-low latency (< 10ms pauses)
- Concurrent и incremental
- Работает с heap до 16TB
- Требует Java 11+
- Высокие CPU overhead
java -XX:+UseZGC \
-XX:-ZProactive \
-XX:ZUncommitDelay=300 \
MyApp
Когда использовать: финансовые системы, real-time systems, low-latency trading
6. Shenandoah GC
Ещё один low-latency collector, альтернатива ZGC.
java -XX:+UseShenandoahGC MyApp
Характеристики:
- Concurrent сборка (может быть pause-less)
- Работает с большими heap'ами
- Требует Java 12+
- Experimental в некоторых версиях
Сравнение GC алгоритмов
| GC | Паузы | Throughput | Heap | Рекомендация |
|---|---|---|---|---|
| Serial | Высокие | Средний | Маленький | Тестирование |
| Parallel | Высокие | Высокий | Средний | Batch jobs |
| CMS | Низкие | Средний | Большой | DEPRECATED |
| G1 | Средние | Хороший | Большой | Большинство приложений |
| ZGC | Очень низкие | Средний | Очень большой | Real-time системы |
| Shenandoah | Очень низкие | Средний | Большой | Low-latency |
Настройки для разных сценариев
Web приложение (Spring Boot):
java -XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-Xmx4g \
-Xms4g \
myapp.jar
High-throughput система:
java -XX:+UseParallelGC \
-XX:ParallelGCThreads=16 \
-Xmx16g \
-Xms16g \
myapp.jar
Low-latency система:
java -XX:+UseZGC \
-XX:ZUncommitDelay=300 \
-Xmx8g \
-Xms8g \
myapp.jar
Мониторинг GC
# Базовый GC logging
java -XX:+PrintGCDetails \
-XX:+PrintGCDateStamps \
-Xloggc:gc.log \
MyApp
# Смотреть GC в real-time
jstat -gc -h10 <pid> 1000
# Анализ GC логов
jstat -gcutil <pid> 1000
Лучшие практики
- Для development: используй G1GC (по умолчанию)
- Для production: протестируй разные GC под реальной нагрузкой
- Мониторь pauses: отслеживай GC паузы в production
- Настраивай Xmx и Xms одинаково (иначе heap resizing добавит overhead)
- Не угадывай — profile и benchmark с реальными данными
- Для новых проектов: используй ZGC или Shenandoah если требуется ultra-low latency