G1 хотят сделать GC по умолчанию вообще везде. Даже там, где JVM раньше выбирала Serial.
Это важное, но на первый взгляд не самое громкое изменение в HotSpot.
Сейчас логика такая:
— в серверных сценариях JVM уже давно по умолчанию выбирает G1;
— в более ограниченных средах, например с небольшим объёмом памяти или малым числом CPU, JVM могла выбрать Serial GC.
Теперь так:
если вы явно не указали GC, HotSpot всегда выбирает G1.
Почему так решили?
Когда G1 сделали дефолтным для серверных окружений в JDK 9, у Serial оставались заметные плюсы в более узких конфигурациях — по throughput и memory footprint. Поэтому JVM сохраняла отдельную ветку выбора для “маленьких” сред.
Но с тех пор G1 сильно подтянули:
— по пропускной способности он уже близок к Serial;
— по паузам он давно выглядит лучше;
— по потреблению нативной памяти тоже стал гораздо конкурентоспособнее.
То есть аргумент “в ограниченной среде по умолчанию нужен именно Serial” уже не выглядит таким железным.
Что это значит на практике?
— поведение JVM станет предсказуемее;
— дефолтный GC больше не будет зависеть от того, сколько у вас CPU и памяти;
— разбирать поведение приложения и JVM станет проще.
При этом важно:
— Serial никуда не исчезает;
— если он лучше подходит вашему кейсу, его по-прежнему можно указать явно;
— речь не о том, что Serial плохой, а о том, что G1 теперь достаточно хорош, чтобы быть разумным дефолтом везде.
Конечно, это не революция, но признак зрелости G1:
из дефолта для серверов он превращается в универсальный baseline для HotSpot.
❓А вы вообще в проде/локально полагаетесь на GC по умолчанию или всегда фиксируете его флагами?
Post #1074
6.66K
- 👍 36
- ❤ 8
- 🔥 6
- ⚡ 1
- 👌 1