В JetBrains рассказали о поддержке Java 27 в IntelliJ IDEA
В JetBrains рассказали о поддержке Java 27 в IntelliJ IDEA. Фото: из архива компании
Как отмечается в блоге, в этом выпуске девять JEP, четыре из которых являются финальными, а также четыре preview-функции и одна инкубаторная. IntelliJ IDEA поддерживает Java 27 с первого дня, а получить ту же поддержку последних версий Java можно и за пределами IDE — через LSP-инициативу, приносящую интеллектуальные возможности для Java и Kotlin в VS Code, Cursor и агентные потоки.
Чтобы использовать Java 27 в IntelliJ IDEA, нужно сначала скачать JDK 27 — прямо из IDE через Project Structure, вкладку Project Settings | Project и пункт Download JDK, либо указать уже установленную версию через Add JDK from Disk.
Версия JDK автоматически распространяется из настроек проекта на терминал, поэтому и разработчик, и агент используют правильный JDK. Если для управления JDK применяются SDKMAN! или asdf, IntelliJ IDEA может прочитать файлы .sdkmanrc или .tool-versions и настроить JDK автоматически, а при отсутствии нужной версии в .sdkmanrc появляется подсказка для её загрузки прямо из IDE, что работает даже без установленного SDKMAN! и доступно пользователям Windows.
Уровень языка устанавливается как 27 — No new language features, а для preview-функций — 27 (Preview) — Primitive types in patterns, instanceof, and switch (5th preview), причём IDE подсвечивает использование preview-функций в редакторе.
Среди новых стабильных функций Java 27 — JEP 523, делающий сборщик мусора G1 по умолчанию во всех средах, включая машины с одним CPU или менее 1 792 МБ RAM, которые ранее переходили на Serial GC; при необходимости Serial можно явно включить опцией -XX:+UseSerialGC. JEP 527 добавляет гибридный постквантовый обмен ключами для TLS 1.3, защищая от атак «перехвати сейчас, расшифруй позже».
JEP 534 делает компактные заголовки объектов поведением по умолчанию в HotSpot JVM, сокращая заголовки с 96 до 64 бит на 64-битных архитектурах, что уменьшает размер кучи, повышает плотность развёртывания и локальность данных; JetBrains IDEs уже используют эту функцию и отмечают стабильную экономию памяти. JEP 536 добавляет редактирование данных в процессе для JDK Flight Recorder, скрывая аргументы командной строки и начальные значения переменных среды и системных свойств до того, как записи покинут процесс.
Четыре preview-функции Java 27 совпадают с Java 26, но некоторые из них переработаны: JEP 531 о ленивых константах, которые вычисляются по мере необходимости и могут улучшить время запуска, JEP 532 о примитивных типах в patterns, instanceof и switch, снимающий ограничения сопоставления с образцом и позволяющий безопасно преобразовывать примитивные значения, JEP 533 о структурной конкурентности, рассматривающей группы связанных задач в разных потоках как единые единицы работы, и JEP 538 о PEM-кодировании криптографических объектов.
Инкубаторная JEP 537 о Vector API, позволяющая выражать векторные вычисления, компилируемые в оптимальные векторные инструкции, не изменилась по сравнению с Java 26 и требует явного добавления модуля через опцию --add-modules jdk.incubator.vector.
Помимо JEP, в JDK 27 вошли исправления ошибок, в частности JDK-6960970, из-за которой отладчик работал очень медленно при пошаговом выполнении, — теперь этот процесс стал быстрее. Инженеры JetBrains перенесли исправление в JetBrains Runtime 25, что подтверждает возможность бэкпорта в Java 25. Говоря о будущем, в блоге отмечают, что функции Project Valhalla начали проникать в Java: value objects (JEP 401) и строгая инициализация полей в JVM (JEP 539) нацелены на JDK 28 как preview-функции, поэтому для их проверки больше не нужен специальный дистрибутив Valhalla — достаточно скачать JDK 28 EA, в том числе из IntelliJ IDEA.
В заключение подчёркивается, что, хотя Java 27 не является LTS-релизом, она приносит улучшения безопасности и производительности и продолжает развивать важные preview-функции, а IntelliJ IDEA поддерживает её с первого дня и будет поддерживать новейшие возможности Java.
Упомянутый сервис
Комментариев пока не было