LINUX.ORG.RU

Java SE 27 и OpenJDK 27

 , , , ,


0

2

После шести месяцев разработки компания Oracle опубликовала платформу Java SE 27 (Java Platform, Standard Edition 27), в качестве эталонной реализации которой используется открытый проект OpenJDK. За исключением удаления некоторых устаревших возможностей в Java SE 27 сохранена обратная совместимость с прошлыми выпусками платформы Java — большинство ранее написанных Java-проектов без изменений будут работоспособны при запуске под управлением новой версии. Готовые для установки сборки Java SE 27 (JDK, JRE и Server JRE) подготовлены для Linux (x86_64, AArch64), Windows (x86_64) и macOS (x86_64, AArch64). Разработанная в рамках проекта OpenJDK эталонная реализация Java SE 27 полностью открыта под лицензией GPLv2 с исключениями GNU ClassPath, разрешающими динамическое связывание с коммерческими продуктами.

Java SE 27 отнесён к категории выпусков с обычным сроком поддержки, обновления для которого будут выпускаться до следующего релиза. В качестве ветки с длительным сроком поддержки (LTS) следует использовать Java SE 25, Java SE 21 или Java SE 17, обновления для которых будут выпускаться до 2033, 2031 и 2029 годов соответственно (общедоступные — до сентября 2030, 2028 и 2026 годов). Расширенная поддержка LTS-ветки Java SE 8 продлится до 2030 года, а Java SE 11 — до 2032 года.

Среди изменений в Java SE 27 (openjdk.org, oracle.com, java.net, blogs.oracle.com):

  • По умолчанию для всех окружений задействован сборщик мусора G1 (oracle.com) (Garbage-First), который ранее применялся для серверных систем. G1 оптимизирован для использования на многопроцессорных системах с большим объёмом памяти и балансирования между предсказуемостью задержек и высокой пропускной способностью. В процессе работы G1 разделяет память на множество мелких регионов и в первую очередь очищает те регионы, где больше неиспользуемых объектов и меньше активно используемых данных.
  • В HotSpot JVM по умолчанию задействованы компактные заголовки объектов. Размер заголовков на 64-разрядных системах уменьшен с 96 до 64 бит, что сократило потребление памяти и повысило вероятность попадания данных в процессорный кэш. В тестах SPECjbb2015 потребление памяти снизилось на 22%, нагрузка на CPU уменьшилась на 8%, а число операций сборки мусора снизилось на 15%. При тестировании парсера JSON время прохождения тестов сократилось на 10%.
  • В реализацию TLS 1.3 добавлена поддержка гибридных схем согласования ключей, комбинирующий алгоритм ML-KEM (CRYSTALS-Kyber), устойчивый для подбора на квантовых компьютерах, с классическими алгоритмами на базе эллиптических кривых ECDHE: X25519MLKEM768 (ECDHE с кривой X25519 + ML-KEM-768), SecP256r1MLKEM76 (ECDHE с кривой secp256r1 + ML-KEM-768) и SecP384r1MLKEM1024 (ECDHE с кривой secp384r1 + ML-KEM-1024). В API javax.net.ssl данные схемы включены по умолчанию и для применения не требуют изменения приложений.
  • В инструментарий JDK Flight Recorder (JFR (dev.java)), применяемый для мониторинга, профилирования и диагностики производительности, добавлена поддержка очистки в сохраняемой диагностической информации аргументов командной строки, начальных значений переменных окружения и системных свойств. Изменение позволяет предотвратить утечку конфиденциальных данных, которые обрабатывает профилируемый процесс, таких как передаваемые через переменные окружения токены авторизации и ключи доступа к API.
  • Реализована третья предварительная редакция API Lazy Constants для работы с объектами, содержащими неизменяемые данные и обрабатываемыми в JVM как константы. К подобным объектам применяются оптимизации производительности, аналогичные полям с ключевым словом final. В отличие от final новый API разделяет создание постоянных значений и их инициализацию, гарантирует, что значение может быть инициализировано только один раз, сокращает время запуска программ и позволяет применять в пользовательском коде оптимизации сворачивания констант (constant-folding), ранее использовавшиеся только во внутреннем коде JDK:
class Application {
    // Было:
    // static final UserService USERS = new UserService();
    // Теперь можно:
    static final StableValue<UserService> USERS = StableValue.of();

    public static UserService users() {
        return USERS.orElseSet(UserService::new);
    }
}
  • В механизме сопоставления с образцом предложен пятый предварительный вариант возможности использования примитивных типов (int, byte, char и другие базовые типы, не являющиеся объектами) во всех видах шаблонов, в операторе instanceof и в блоках switch:
switch (x.getStatus()) {
    case 0 -> "okay";
    case 1 -> "warning";
    case 2 -> "error";
    case int i -> "unknown status: " + i;
   }
if (i instanceof byte b) {
    ... b ...
}
  • Предложен для тестирования седьмой предварительный вариант API для cтруктурированного параллелизма (Structured Concurrency), упрощающего разработку многопоточных приложений за счёт обработки нескольких задач, выполняемых в разных потоках, как единого блока.
  • Реализована двенадцатая тестовая реализация API Vector, предоставляющего функции для векторных вычислений, которые выполняются с использованием векторных инструкций процессоров x86_64 и AArch64 и позволяют одновременно применить операции сразу к нескольким значениям (SIMD). В отличие от предоставляемых в JIT-компиляторе HotSpot возможностей по автовекторизации скалярных операций, новый API даёт возможность явно управлять векторизацией для параллельной обработки данных.
  • Доступен третий предварительный вариант API для кодирования и декодирования объектов с криптографическими ключами, сертификатами и списками отозванных сертификатов, используя формат PEM (Pivacy-Enhanced Mail).

Дополнительно можно отметить публикацию обновления платформы для создания приложений с графическим интерфейсом JavaFX 27. В ближайшие часы также ожидается выпуск универсальной виртуальной машины GraalVM 27, поддерживающей запуск приложений на JavaScript (Node.js), Python, Ruby, R, любых языках для JVM (Java, Scala, Clojure, Kotlin) и языках, для которых может формироваться биткод LLVM (C, C++, Rust).

>>> Источник: OpenNET

★★★★★

Проверено: cetjs2 ()

языках, для которых может формироваться биткод LLVM (C, C++, Rust).

Оригинально.

zanac1 ★★
()

После шести месяцев разработки компания Oracle опубликовала

Можно ли из этого сделать вывод, что ещё через 6 месяцев компания опубликует Java 28 ?

Saakx ☆
()

А векторизацию всё никак нормально родить не могут.

добавлена поддержка очистки в сохраняемой диагностической информации аргументов командной строки, начальных значений переменных окружения и системных свойств.

Ну, лучше поздно, чем никогда.

DzenPython ★
()
Последнее исправление: DzenPython (всего исправлений: 1)
Ответ на: комментарий от Saakx

Ну да. Бета-версию языка Java под нумером 28.
Стабильная версия теперь каким-то чёртом называется LTS.

А реальный LTS до сих пор 8ка

DzenPython ★
()

По умолчанию для всех окружений задействован сборщик мусора G1

Жесть, конечно, учитывая, что он появился еще во времена Java7...

X-Pilot ★★★★★
()

Не, ребятки, я так и не дождался валгалы. Вплоть до того, что принудили меня пилить собственный ЯП.

foror ★★★★★
()

Они же всех уволили и заменили роботами. Получается, что это релиз от клода

SpaceRanger ★★★★
()
Ответ на: комментарий от DzenPython

Java под нумером 28

В ней анонсировано много всего нового. Интересно же.

Saakx ☆
()
Ответ на: комментарий от foror

Не, ребятки, я так и не дождался валгалы.

JDK 28

maxcom ★★★★★
()

За исключением удаления некоторых устаревших возможностей в Java SE 27 сохранена обратная совместимость с прошлыми выпусками платформы Java — большинство ранее написанных Java-проектов без изменений будут работоспособны при запуске под управлением новой версии.

Ключевое преимущество Джавы перед Си-шарпом. Вдобавок на обсуждаемой тут операционной системе Джава работает лучше Си-шарпа - поэтому и побеждает.

Enthusiast ★★★☆
()

Не вижу ничего про именованные параметры и значения/выражения параметров по умолчанию. Ставлю ненужно, т.к. это единственная фича, из-за отсутствия которой в жаве я взялся за котлин.

dimgel ★★★★★
()
Ответ на: комментарий от vbr

Очередной релиз и в очередной раз ничего нового

Java надо было как TeX заморозить, например, на версии 7 и выпускать только расширение библиотеки и патчи безопасности. Такие вещи совсем не про новизну (ломающую).

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от dimgel

Не вижу ничего про именованные параметры и значения/выражения параметров по умолчанию.

Этого нет и, похоже, в обозримом будущем не предвидится. Не видел вообще ни одного JEP на эту тему. Чисто теоретически можно параметры передавать через record, и в record в некоем обозримом будущем завезут фичи, которые позволят их делать с помощью синтаксиса, напоминающего именованные параметры. Это позволит частично имитировать всю эту фичу. Будет что-то вроде

record InsertUserParameters(Integer age, String name, String id) {
    static final InsertUserParameters DEFAULT = new InsertUserParameters(null, null, null);
}

void insertUser(InsertUserParameters parameters);


insertUser(
    InsertUserParameters.DEFAULT with {
      age = 18;
      name = "John";
    }
);

но тут все параметры будут опциональные, обязательных вообще не будет.

Ставлю ненужно, т.к. это единственная фича, из-за отсутствия которой в жаве я взялся за котлин.

А мне очень не хватает в Java т.н. свойств (properties). И нет, records это и близко не то.

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.