Какой сборщик мусора используется по умолчанию в Java 11?

«Какой сборщик мусора используется по умолчанию в Java 11?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В 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 остаётся стандартным выбором.