← Назад к вопросам

Какие опции по сборке мусора есть у разработчика

3.0 Senior🔥 141 комментариев
#JVM и управление памятью

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Опции сборки мусора для разработчика 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ПаузыThroughputHeapРекомендация
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

Лучшие практики

  1. Для development: используй G1GC (по умолчанию)
  2. Для production: протестируй разные GC под реальной нагрузкой
  3. Мониторь pauses: отслеживай GC паузы в production
  4. Настраивай Xmx и Xms одинаково (иначе heap resizing добавит overhead)
  5. Не угадывай — profile и benchmark с реальными данными
  6. Для новых проектов: используй ZGC или Shenandoah если требуется ultra-low latency