В Java используются различные сборщики мусора, каждый со своими особенностями:
- Serial GC: Однопоточный, подходит для небольших приложений и клиентских JVM. При сборке останавливает все потоки приложения (Stop-The-World или STW).
- Parallel GC (Throughput GC): Многопоточный, оптимизирован для увеличения пропускной способности приложения за счет использования нескольких потоков для сборки в молодом поколении и одного потока для старого. Также вызывает STW.
- CMS (Concurrent Mark Sweep GC): Предназначен для минимизации пауз благодаря фазам конкурентной сборки (когда приложение продолжает работать). Имеет фазы STW, но они короче, чем у Serial и Parallel GC. Может привести к фрагментации памяти.
- G1 (Garbage-First GC): Разделяет хип на регионы. Пытается собирать мусор в регионах с наибольшим количеством мусора ("garbage-first"). Целью является достижение предсказуемых пауз.
- ZGC (Z Garbage Collector): Масштабируемый сборщик мусора с очень низкими задержками (менее 10 мс) даже при очень больших хипах (терабайты). Практически полностью конкурентен.
- Shenandoah: Сборщик мусора с очень низкими паузами, разработан OpenJDK. Практически полностью конкурентен, как и ZGC.
Выбор сборщика мусора зависит от требований к приложению, таких как пропускная способность, задержки и размер хипа.