Ответ
В Java 11 сборщиком мусора по умолчанию является G1 (Garbage-First).
Почему G1? Он заменил CMS (Concurrent Mark-Sweep) как сборщик по умолчанию, начиная с Java 9. G1 обеспечивает баланс между низкой задержкой (low latency) и высокой пропускной способностью (high throughput), что подходит для большинства современных приложений.
Как работает G1:
- Разделяет кучу на множество регионов фиксированного размера.
- Работает по принципу "сначала мусор" — в первую очередь собирает регионы с наибольшим количеством мусора.
- Выполняет сборку параллельно и инкрементально, минимизируя паузы (stop-the-world).
Пример проверки используемого GC в рантайме:
public class GCDemo {
public static void main(String[] args) {
String gcName = System.getProperty("java.vm.gc");
System.out.println("Current GC: " + (gcName != null ? gcName : "G1 (default)"));
}
}
Примечание: Начиная с Java 17, появился новый экспериментальный сборщик ZGC, но G1 остаётся стандартным выбором.