Введение

Добро пожаловать в подробное руководство по сборке мусора в Java 17. Этот пост послужит вводным курсом по сборщикам мусора, доступным в Java 17, их использованию и тому, когда использовать каждый из них.

Введение в сборку мусора

Прежде чем мы углубимся в типы сборщиков мусора, давайте сначала разберемся, что такое сборка мусора. В контексте Java сборка мусора (GC) относится к процессу автоматического освобождения памяти, которая больше не требуется приложению. Этот процесс помогает уменьшить утечки памяти, высвободить ресурсы и повысить общую производительность системы.

Сборщики мусора в Java 17

Java 17 поддерживает несколько типов сборщиков мусора, в том числе Serial GC, Parallel GC, Concurrent Mark Sweep (CMS) GC, G1 GC и недавно представленный Z Garbage Collector (ZGC) и Shenandoah GC. Каждый из этих сборщиков мусора имеет уникальные характеристики и может быть выбран в зависимости от требований вашего Java-приложения.

1. Серийный ГХ

Последовательный сборщик мусора, также известный как «однопоточный» сборщик мусора, представляет собой простейшую форму сборки мусора в Java. Он использует только один поток ЦП для сборки мусора, что означает, что он может быть эффективен для приложений с небольшим размером кучи (примерно до 100 МБ). Однако во время процесса сборки мусора пользовательские потоки приостанавливаются, что может привести к проблемам с задержкой в ​​больших приложениях.

2. Параллельный сборщик мусора

Parallel GC, также известный как «сборщик пропускной способности», является сборщиком мусора по умолчанию для JVM. Он использует несколько потоков для сборки мусора, что может значительно ускорить процесс сборки мусора. Однако, как и Serial GC, он также останавливает все потоки приложений во время сборки мусора, этап, известный как «остановить мир» (STW).

3. Параллельная проверка меток (CMS) GC

Сборщик мусора CMS предназначен для сведения к минимуму пауз, вызванных сборкой мусора, за счет выполнения большей части своей работы одновременно с потоками приложения. Он лучше всего подходит для приложений с низкими требованиями к задержке и может позволить себе больше ядер ЦП для обеспечения незначительных сбоев.