Java 27 вышла с компактными заголовками объектов и G1 по умолчанию
Общедоступный релиз Java 27 вышел 15 сентября 2026 года: JDK 27 стал референсной реализацией платформы Java SE 27 по спецификации JSR 402. В релиз вошло около 2500 закрытых задач и 9 JEP. LTS-статуса у версии нет, обновления будут выходить полгода, до марта 2027 года.
Compact Object Headers (JEP 534) включены по умолчанию. Заголовок объекта на 64-битных платформах уменьшился с 96 или 128 бит до 64 бит, флаг -XX:+UseCompactObjectHeaders больше не нужен, отключить сжатие можно ключом -XX:-UseCompactObjectHeaders. Сжатие получено объединением mark-слова и class-слова в одно 64-битное слово, указатели на классы всегда сжаты (22 бита вместо 32), identity-хеш занимает 31 бит, ещё четыре бита зарезервированы под Valhalla. Это работа проекта Lilliput. G1 (JEP 523) теперь выбирается во всех окружениях: раньше на одном процессоре или при памяти меньше 1792 МБ JVM включала Serial GC, вернуть его можно ключом -XX:+UseSerialGC.
В TLS 1.3 добавлены пост-квантовые гибридные схемы обмена ключами (JEP 527), где ML-KEM комбинируется с ECDHE: X25519MLKEM768, SecP256r1MLKEM768 и SecP384r1MLKEM1024. Включать ничего не надо, при рукопожатии X25519MLKEM768 получает наивысший приоритет. JDK Flight Recorder редактирует чувствительные данные (JEP 536): подопция redact-argument задаёт аргументы командной строки, redact-key — переменные окружения и системные свойства, значения заменяются на [REDACTED]. Без явных настроек работают фильтры по умолчанию, среди них *passwd*, *password*, *credential*, *secret* и *token*.
Четыре JEP остались в preview: Lazy Constants (JEP 531, третий preview; из API убрали LazyConstant::isInitialized и orElse, добавили Set::ofLazy), Structured Concurrency (JEP 533, седьмой preview), Primitive Types in Patterns, instanceof и switch (JEP 532, пятый preview) и PEM Encodings of Cryptographic Objects (JEP 538, третий preview). Vector API (JEP 537) ушёл в двенадцатый инкубатор в модуле jdk.incubator.vector.