Что такое Garbage Collection в Java? Какие сборщики мусора знаете?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Garbage Collection в Java
Garbage Collection (GC) — это автоматический механизм управления памятью в Java Virtual Machine, который освобождает память от объектов, которые больше не используются программой. Это критически важная функция JVM, так как избавляет разработчиков от необходимости ручного управления памятью, что было бы источником множества ошибок и утечек памяти.
Как работает GC
Java разбивает память на две основные области:
- Young Generation — где создаются новые объекты
- Old Generation — где хранятся долгоживущие объекты
- Metaspace — для метаданных класса
Когда память заполняется, сборщик мусора находит объекты, на которые нет ссылок, и освобождает их память. Процесс использует алгоритм "mark-and-sweep": сначала помечаются живые объекты (достижимые из root references), затем удаляются остальные.
Основные сборщики мусора
1. Serial GC
Самый простой сборщик, использует один поток для всех операций GC. Подходит для небольших приложений и однопроцессорных систем.
// Включение: java -XX:+UseSerialGC Application
2. Parallel GC (Throughput GC)
Использует несколько потоков для сборки мусора в Young Generation, что повышает пропускную способность. Хорош для batch-обработки и приложений, нечувствительных к паузам.
// По умолчанию в Java 8
// java -XX:+UseParallelGC Application
3. CMS GC (Concurrent Mark-Sweep)
Попытается минимизировать паузы, выполняя большинство операций параллельно с приложением. Хорош для low-latency приложений, но требует больше CPU.
// Deprecated в Java 9, удален в Java 14
// java -XX:+UseConcMarkSweepGC Application
4. G1GC (Garbage First)
Современный сборщик, рекомендуемый для heap > 4GB. Делит heap на регионы и собирает мусор с наименьшей стоимостью. Предсказуемые паузы.
// По умолчанию в Java 9+
// java -XX:+UseG1GC Application
5. ZGC (Z Garbage Collector)
Очень низкие паузы (< 10ms) даже с большой памятью. Экспериментальный, требует Java 11+.
// java -XX:+UseZGC Application
6. Shenandoah GC
Альтернатива ZGC, также обеспечивает низкие паузы через concurrent evacuating алгоритм.
// java -XX:+UseShenandoahGC Application
Типы GC сборок
Minor GC — сборка в Young Generation (быстрая, частая) Major GC — сборка в Old Generation (медленная, редкая) Full GC — полная сборка всей памяти (критична для performance)
Как мониторить GC
// Логирование GC
java -Xlog:gc*:file=gc.log Application
// Старый способ (Java 8)
java -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log Application
Опытный разработчик должен понимать поведение сборщика мусора в своем приложении и выбирать подходящий GC в зависимости от требований: low-latency, throughput или сбалансированный подход."