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

Какими сборщиками мусора пользовался

2.3 Middle🔥 111 комментариев
#Основы Java

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

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

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

Опыт работы со сборщиками мусора в Java

В своей практике я работал с несколькими поколениями сборщиков мусора (Garbage Collectors), каждый из которых имеет свои особенности и применяется в разных сценариях.

Serial GC (Последовательный сборщик)

Serial GC — это наиболее простой и легкий сборщик мусора. Используется параметром -XX:+UseSerialGC.

// Включение Serial GC
// java -XX:+UseSerialGC -jar application.jar

Особенности:

  • Однопоточный: выполняет сборку в одном потоке
  • Остановка приложения: во время сборки все потоки приложения паузируются (STW — Stop The World)
  • Минимальные накладные расходы: подходит для однопоточных приложений и низкомощных систем
  • Использование: Single-threaded приложения, локальные утилиты, системы с ограниченной памятью

Parallel GC (Параллельный сборщик)

Parallel GC (по умолчанию в Java 8-20) использует несколько потоков для сборки.

// Включение Parallel GC
// java -XX:+UseParallelGC -jar application.jar
// java -XX:ParallelGCThreads=4 -jar application.jar

Преимущества:

  • Многопоточная обработка: использует несколько потоков для ускорения сборки
  • Высокая пропускная способность: оптимален для batch-приложений
  • Меньше пауз: чем Serial, но все равно происходит STW
  • Оптимизация: можно настраивать количество потоков

CMS GC (Concurrent Mark Sweep)

CMS — старый низкозадержный сборщик, ныне deprecated.

// java -XX:+UseConcMarkSweepGC -jar application.jar

Особенности:

  • Конкурентная разметка: большая часть работы выполняется параллельно с приложением
  • Короткие паузы: меньше STW, чем Parallel GC
  • Фрагментация: может вызывать фрагментацию heap
  • Deprecated: не рекомендуется для современных приложений

G1GC (Garbage First)

G1GC — современный гибридный сборщик, по умолчанию с Java 9+.

// java -XX:+UseG1GC -Xmx4g -Xms4g -XX:MaxGCPauseMillis=200 application.jar

Это мой основной выбор для production:

  • Разделение на регионы: heap разбит на малые регионы (regions)
  • Предсказуемые паузы: гарантирует STW паузы не дольше установленного лимита
  • Конкурентность: большинство работы выполняется параллельно
  • Масштабируемость: хорошо работает с большими heap
  • Низкая фрагментация: автоматически компактирует память

ZGC (Z Garbage Collector)

ZGC — самый современный low-latency сборщик (Java 15+).

// java -XX:+UseZGC -Xmx16g -Xms16g application.jar

Особенности:

  • Субмиллисекундные паузы: STW всегда < 10ms
  • Конкурентный: почти вся работа параллельна приложению
  • Большие heap: оптимален для systems с heap > 8GB
  • Расход CPU: выше, чем другие сборщики
  • Применение: high-frequency trading, real-time системы

Shenandoah GC

Shenandoah — еще один low-latency вариант (RedHat, Java 12+).

// java -XX:+UseShenandoahGC -Xmx8g application.jar
  • Похож на ZGC, но с другой реализацией
  • Паузы < 10ms
  • Меньше расходует CPU, чем ZGC

Практический выбор

Мой подход в проектах:

  1. Микросервис в контейнереG1GC (баланс latency и throughput)
  2. High-frequency системыZGC или Shenandoah
  3. Batch обработкаParallel GC
  4. Легкие приложенияSerial GC

Для настройки я всегда используюметрики из JMeter/Prometheus и мониторю GC logs через инструменты типа GC Viewer или Grafana.

Какими сборщиками мусора пользовался | PrepBro