Технологии

Java 27 устраняет GC, замораживавший приложения, и сокращает память объектов на 33%

Adrian Kessler
Добавьте нас в Google

Java 27 выходит с двумя изменениями, которые незаметно затронут каждую JVM, работающую где бы то ни было. Сборщик мусора G1 теперь используется по умолчанию во всех средах выполнения Java — это кладёт конец эпохе «останови-мир» Serial GC на ограниченном «железе» — а заголовки объектов сократились с 96 до 64 бит, снижая накладные расходы на треть для любого приложения, создающего значительное количество объектов.

Serial GC был старейшим сборщиком мусора в Java: простым, предсказуемым и безжалостным. Когда он запускался, он замораживал всё приложение до полной очистки кучи. На серверах с большим объёмом памяти и несколькими CPU этот компромисс стал неприемлемым много лет назад — начиная с Java 9 G1 заменил Serial в качестве умолчания для серверов. Ограниченные среды продолжали использовать Serial вплоть до Java 26: однопроцессорные машины, маленькие облачные виртуалки, встраиваемые системы с малым объёмом памяти. С Java 27 это умолчание отменяется.

G1 делит кучу на небольшие регионы и собирает их инкрементально, в первую очередь обрабатывая участки с наибольшим количеством мусора — отсюда и название Garbage-First. Паузы по-прежнему случаются, но они короче и более предсказуемы, чем полная сборка Serial. Oracle утверждает, что G1 теперь конкурентоспособен с Serial при любом размере кучи. Для разработчиков, разворачивающих приложения на самых дешёвых облачных инстансах — один CPU, один гигабайт RAM — Java 27 устраняет проблему, с которой они жили годами.

Уменьшение заголовков объектов — вторая половина этого релиза. Объекты Java несут метаданные — информацию о типе, хеш-коды, состояние блокировки — которые хранятся в заголовке, прикреплённом к каждому объекту. Старый формат использовал 96 бит. Java 27 сжимает его до 64 бит — сокращение на 33% на объект. Для приложений, создающих миллионы объектов — очереди сообщений, финансовые реестры, событийно-ориентированные микросервисы — совокупный эффект измерим: более плотная куча, лучшее использование кэша CPU, меньше циклов сборки.

У обоих изменений есть оговорки. Приложения, явно настроенные под поведение Serial GC, могут столкнуться с неожиданными изменениями таймингов после обновления. G1 использует больше памяти для служебных нужд, чем Serial, что важно в средах с действительно жёстким бюджетом памяти — хотя тестирование Oracle показывает, что компромисс по пропускной способности пренебрежимо мал для большинства нагрузок. Командам разработки, разворачивающим Java 27 на ограниченных системах, следует протестировать приложения с новыми умолчаниями перед выпуском. Переход автоматический, но не невидимый.

Java 27 также добавляет постквантовый гибридный обмен ключами для TLS 1.3, реализуя алгоритм ML-KEM наряду с существующим обменом по эллиптической кривой X25519. TLS-соединения, установленные сегодня, теоретически могут быть перехвачены и расшифрованы позднее с помощью будущего квантового компьютера. Гибридный обмен ключами защищает от этого, требуя от атакующего взломать одновременно и классический, и постквантовый алгоритм — значимое дополнение для любого Java-сервиса, работающего с чувствительными данными.

Java 27 была выпущена 15 сентября 2026 года в рамках шестимесячного цикла платформы. Структурированная конкурентность и ленивые константы остаются в этой версии в статусе preview-функций. Следующий релиз с долгосрочной поддержкой в серии Java ожидается в 2027 году.

Теги: , , , , ,

Добавьте нас в Google

Обсуждение

Имеется 0 комментариев.