The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Выпуск Java SE 24 и OpenJDK 24

19.03.2025 19:17

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

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

Среди предложенных в Java SE 24 новшеств:

  • Предложен экспериментальный генеративный режим работы сборщика мусора Shenandoah, при котором раздельно обрабатываются старые и недавно созданные объекты для повышения эффективности очистки объектов с небольшим временем жизни. Новый режим обеспечивает более предсказуемую пропускную способность, устойчивость к изменению нагрузки и снижение потребления памяти при сборке мусора. Планировщик Shenandoah нацелен на сокращение времени остановок во время сборки мусора за счёт проведения большего объёма работ параллельно с выполнением Java-приложений.
  • В HotSpot JVM реализована экспериментальная поддержка компактных заголовков объектов, размер которых на 64-разрядных системах уменьшен с 96 до 64 бит (с 12 до 8 байт). Уменьшение размера заголовков позволяет сократить размер кучи и повысить эффективность работы кэша.
  • В сборщике мусора G1 упрощена реализация барьеров, отслеживающих доступ приложения к памяти. В новой версии операции расширения барьеров перенесены на более поздний этап компиляции в C2 JIT. Проведённые тесты показывают, что подобный перенос позволяет снизить накладные расходы в JIT-компиляторе C2 на 10-20% в зависимости от приложения.
  • Добавлен API для использования криптографических функций формирования ключа (KDF, key derivation function), позволяющих сформировать дополнительные ключи необходимой длины на основе секретного ключа (например, пароля) и произвольного набора данных. KDF API пока имеет статус предварительного (preview).
  • Добавлена возможность упреждающей (Ahead-of-Time) загрузки и компоновки классов. Изменение позволяет ускорить запуск HotSpot JVM за счёт предоставления используемых в приложении классов в уже загруженном и скомпонованном состоянии. Во время первого запуска приложения состояние всех классов сбрасывается в кэш и при последующих запусках используется для ускорения загрузки.
  • Добавлен API Class-File для разбора, генерации и преобразования файлов с классами Java.

    
       ClassFile cf = ClassFile.of();
       ClassModel classModel = cf.parse(bytes);
       byte[] newBytes = cf.build(classModel.thisClass().asSymbol(),
            classBuilder -> {
                for (ClassElement ce : classModel) {
                    if (!(ce instanceof MethodModel mm
                            && mm.methodName().stringValue().startsWith("debug"))) {
                        classBuilder.with(ce);
                    }
                }
            });
    
    
  • Добавлен расширенный API Stream, поддерживающий определение собственных промежуточных операций, которые могут оказаться полезны в случаях, когда существующих встроенных промежуточных операций недостаточно для желаемого преобразования данных. Собственные обработчики подключаются при помощи новой промежуточной операции Stream::gather(Gatherer), которая обрабатывает элементы потока, применяя к ним заданный пользователем обработчик.
    
       jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList()
       $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    
  • Предложена четвёртая предварительная реализация ограниченных значений (Scoped Values), позволяющих совместно использовать неизменяемые данные в потоках и эффективно обмениваться данными между дочерними потоками (значения наследуются). Scoped Values развиваются для замены механизма переменных локальных к потоку (thread-local variables) и более эффективны при использовании очень большого числа виртуальных потоков (тысячи и миллионы потоков). Главное отличие Scoped Values от переменных локальных к потоку в том, что первые записываются один раз, в дальнейшем не могут быть изменены и остаются доступны только на время выполнения потока.
  • В механизмы сопоставления с образцом добавлена предварительная поддержка использования примитивных типов (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 Vector, предоставляющего функции для векторных вычислений, которые выполняются с использованием векторных инструкций процессоров x86_64 и AArch64 и позволяют одновременно применить операции сразу к нескольким значениям (SIMD). В отличие от предоставляемых в JIT-компиляторе HotSpot возможностей по автовекторизации скалярных операций, новый API даёт возможность явно управлять векторизацией для параллельной обработки данных.
  • Реализована поддержка синхронизации виртуальных потоков без их прикрепления (pinning) к потокам, связанным с платформой. Виртуальные потоки в синхронизированном методе или выражении в состоянии блокировки теперь освобождают свой платформенный поток, позволяя другим виртуальным потокам использовать его, что значительно увеличивает количество доступных виртуальных потоков и улучшает масштабируемость приложений, использующих многопоточность.
  • Добавлен третий предварительный вариант возможности, разрешающей указание в конструкторах выражений перед вызовом super(...), используемого для явного вызова конструктора родительского класса из конструктора наследуемого класса, если эти выражения не ссылаются на создаваемый конструктором экземпляр.
    
       class Outer {
           void hello() {
               System.out.println("Hello");
           }
           class Inner {
               Inner() {
                   hello();
                   super();
               }
           }
       }
    
  • В утилите jlink реализована поддержка создания образов run-time без использования файлов JMOD, что позволяет примерно на 25% сократить размер JDK.
  • Добавлен второй предварительный вариант использования одного выражения "import module M" для импорта сразу всех пакетов, экспортируемых указанным модулем. Изменение существенно упрощает повторное использование модульных библиотек, позволяя подключать библиотеки и классы без определения их места в иерархии пакетов. Например, указание "import module java.base" приведёт к импорту всех 54 пакетов, входящих в модуль java.base, которые ранее потребовалось бы упоминать по-отдельности ("import java.io.*", "import java.util.*" и т.п.).
  • Добавлена четвёртая предварительная реализация неявно объявленных классов и безымянных экземпляров метода "main", в которых можно обойтись без объявлений public/static, передачи массива аргументов и прочих сущностей, связанных с объявлением класса.
    
       // было
       public class HelloWorld {
         public static void main(String[] args) {
           System.out.println("Hello world!");
         }
       }
    
       // теперь можно
       void main() {
           System.out.println("Hello, World!");
       }
    
  • Предложен для тестирования четвёртый предварительный вариант API для cтруктурированного параллелизма (Structured Concurrency), упрощающего разработку многопоточных приложений за счёт обработки нескольких задач, выполняемых в разных потоках, как единого блока.
  • В API KeyPairGenerator, Signature и KeyFactory добавлена поддержка алгоритмов ML-KEM (CRYSTALS-Kyber) и ML-DSA (CRYSTALS-Dilithium), стандартизированных Национальным институтом стандартов и технологий США (NIST) и стойких к подбору на квантовом компьютере. Данные алгоритмы используют методы криптографии, основанные на решении задач теории решёток, время решения которых не отличается на обычных и квантовых компьютерах.
  • В сборщике мусора ZGC удалена поддержка не генеративного режима работы, не разделяющего обработку "старых" и "молодых" объектов. Начиная с Java SE 23 генеративный режим ZGC применяется по умолчанию.
  • Добавлен вывод предупреждений об использовании API JNI (Java Native Interface) и FFM (Foreign Function & Memory) с целью подготовки разработчиков к ограничению доступа к данным API из-за включения в одном из будущих выпусков режима обеспечения целостности, по умолчанию запрещающего взаимодействие с нативным кодом.
  • Включён вывод предупреждения при использовании методов доступа к внешней памяти (вне JVM), предоставляемых классом sun.misc.Unsafe. Для обращения к памяти вне кучи (off-heap) и взаимодействия с внешними кодом рекомендуется использовать API VarHandle. В прошлом выпуске поддержка sun.misc.Unsafe была объявлена устаревшей.
  • Отключён Security Manager, который давно потерял актуальность и оказался невостребованным после прекращения поддержки браузерного плагина. Security Manager был переведён в разряд устаревших в Java 17. В одном из следующих выпусков планируется полностью удалить код Security Manager.
  • Удалён код для поддержки 32-разрядной платформы ОС Windows на системах x86. Объявлен устаревшим и запланирован к удалению порт Java для 32-разрядных систем x86 (будет прекращена поддержка Linux на 32-разрядных системах x86).

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

  1. Главная ссылка к новости (https://mail.openjdk.org/piper...)
  2. OpenNews: Выпуск Java SE 23 и OpenJDK 23
  3. OpenNews: Выпуск платформы Java SE 22 и открытой эталонной реализации OpenJDK 22
  4. OpenNews: Треть Java-проектов на базе библиотеки Log4j продолжают использовать уязвимые версии
  5. OpenNews: Выпуск Java SE 21
  6. OpenNews: Компания Oracle представила универсальную виртуальную машину GraalVM
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/62914-java
Ключевые слова: java, jdk, graalvm
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (30) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.4, Аноним (4), 20:05, 19/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    Как сейчас у джавы дела с производительностью? Только жиреет с каждым релизом?
     
     
  • 2.16, _hide_ (ok), 21:09, 19/03/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    У самой Жавы с производительностью очень хорошо ещё со времен телефонов с 32КБ памяти. А вот у погромистов на ней не всегда получается избегать узких мест (ведь прикольно же создавать 10Е6 объектов в секунду?).
     
     
  • 3.30, Анон1110м (?), 23:09, 19/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Как–то читал жалобы на то что JVM это сильный тормоз для тех самых телефонов с 32КБ (и около того) памяти. Вместо полезных вычислений ресурсы расходуются на JVM что не даёт им раскрытьяс полностью. Жалобы года эдак 2005.
     
     
  • 4.36, ZloySergant (ok), 01:10, 20/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Балаболы. Всё нормално работало.
     
     
  • 5.38, cheburnator9000 (ok), 02:36, 20/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Это потому что JavaME был оптимизированным рантаймом под конкретные платформы и конкретные задачи, ничего лишнего там не было. Сейчас же в памяти у Java лежит столько всего что компилируемые ЯП в ужасе шарахаются.

    Тот же C# умеет в нативную компиляцию. Там сейчас исключение это не полностью рефлексия поддерживается в таком режиме (та часть, что в рантайме выполняется). В итоге скомпилированная программа вполне конкурирует по производительности с плюсами. А как у Java в этом плане? Подозреваю что очень плохо.

     
     
  • 6.42, Alex (??), 05:37, 20/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    То есть что такое GraalVM ты в принципе не знаешь...
     
  • 2.21, Аноним (21), 21:29, 19/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Всё отлично, как и всегда. Лучший язык для очень больших проектов, пишущихся в больших командах. Но для домашних и соло-проектов java является оверкиллом, да.
     
  • 2.29, Аноним (29), 22:52, 19/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Как сейчас у джавы дела с производительностью

    Производительность? Они вектора на третьем десятке версий до сих пор рожают.

    > девятая предварительная реализация API Vector

     
  • 2.33, Аноним (33), 00:47, 20/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    У явы проблемы с производительностью были только в начале, на самой заре, а в дальнейшем всё стало просто отлично. А вот памяти она всегда жрала много.
     
     
  • 3.35, Аноним (35), 00:59, 20/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Помнится, были легковесные виртуальные машины для неё.
     

  • 1.5, Аноним (5), 20:08, 19/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Насколько велики задержки создаваемые сборщиком мусора? Неужели все настолько плохо?
     
     
  • 2.7, funny.falcon (?), 20:18, 19/03/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Насколько плохо? Для каких задач? Какого сборщика?

    Видите, сколько в вашем холиварном вбросе неизвестных. Очевидно, ответить вам не представляется возможным.

     
     
  • 3.12, Аноним (5), 20:54, 19/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Полагаю, ограничения в сфере задач и будут определяться задержками. Не вброса ради...
     
  • 2.19, Аноним (35), 21:23, 19/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну, некоторые Real-time приложухи на ней даже пишут, только сделать это непросто.
     

  • 1.10, penetrator (?), 20:46, 19/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Что Linq так и не завезли? Почему стримы нельзя было сделать сразу нормальными? ))

    Чет Java ерундой занимается, но все равно всяко лучше, чем костыль вроде Kotlin  

     
     
  • 2.20, Аноним (20), 21:23, 19/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Всмысле костыль? Нормальный язык.
     
     
  • 3.26, penetrator (?), 22:09, 19/03/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    что в нем нормального? джава на стероидах, все новые фичи сделанные через задницу

    даже джава лучше и прозрачнее, с развитием Java котлин станет не нужным

     
     
  • 4.27, Аноним (20), 22:30, 19/03/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > все новые фичи сделанные через задницу

    Конкретно, что не так?

    Nullsafety - хорошая вещь. Функции-строители для создания своего DSL - вообще мега вещь. Да и в целом котлин выглядит красивше и лаконичнее джавы.

    Вы хоть сами то на нём писали? И я имею в виду не в течении 30 минут хелоуворлд создать, а по хорошему в течении нескольких месяцев.

     
     
  • 5.31, Аноним (31), 23:41, 19/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Конкретно, что не так?

    1. Очередная прослойка поверх JVM, добавляющая ненужные зависимости и замедляющая компиляцию и сборку.
    2. Не освобождает от необходимости знать Java, ибо 99% библиотек, с которыми взаимодействует Котлин - написаны на Java. А если я уже знаю Java, нахрен мне знать еще Kotlin?

    >Nullsafety - хорошая вещь

    В Java тоже скоро завезут:

    String! a = "abc"; // OK
    String! a = null; // NUllPointerException

     
     
  • 6.43, User (??), 07:42, 20/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > 1. Очередная прослойка поверх JVM, добавляющая ненужные зависимости и замедляющая компиляцию и сборку.

    Ага. А C - "очередная прослойка поверх llvm, добавляющая ненужные зависимости и замедляющая компиляцию и сборку."

    > 2. Не освобождает от необходимости знать Java, ибо 99% библиотек, с которыми взаимодействует Котлин - написаны на Java. А если я уже знаю Java, нахрен мне знать еще Kotlin?

    Ага-2. А python не освобождает от необходимости знать C, ибо 99% библиотек, с которыми взаимодействует python - написана на C. А если я уже знаю C, нахрен мне знать еще python?

    Считай, что java и kotlin условно "с" и "с++", ага? Развитый интероп, возможность на втором писать "почти как на перовом" и при желании из первого можно даже запилить "почти второй" - но языки все же _разные_ со своей субоптимальной зоной применения.

     
  • 5.32, да ты (-), 00:30, 20/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Nullsafety

    Очень переоценена. Изначально пришла вообще из фп, где любой null в цепочке вызовов лапши функций отправлял в счасливую отладку на века. Фпшники выкрутились сделав null частью возвращаемого типа. В императивных языках так делать не нужно — есть нормальный отладчик, можно написать явную проверку на null где угодно и обработать её. Nullsafety это решение проблемы существующей только в мозгах изучавших computer science по скипу и подхвативших ФП головного мозга.

     
     
  • 6.34, Аноним (33), 00:54, 20/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > В императивных языках так делать не нужно — ... можно написать явную проверку на null где угодно и обработать её

    "Не пиши программы с ошибками, пиши без ошибок". Ну и т.д. из серии про Настоящих Программистов.

    А вообще за годА задолбали ошибки нуллпоинтерэксепшн из-за того что в очередной стопицотый раз кто-то где-то что-то не проверил.

     
     
  • 7.44, Анониматор (?), 08:11, 20/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Приходилось эксплуатировать кучу софта написанного на Java, да и сейчас приходится. В трассировке ошибок всех этих прог угадай что? Да, на все 100% null pointer exception
     

  • 1.17, Аноним (21), 21:21, 19/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сижу на 8 версии и не вижу никакого смысла её менять. Java это всё же в первую очередь про стабильность.
     
  • 1.24, abi (?), 21:42, 19/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А Котлин не в мобильной среде используется? Давно про него не слышно, хотя раньше были заявления, мол, начинать новые проекты на Java, если есть готлин смысла не имеет
     
     
  • 2.25, Аноним (20), 22:01, 19/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Используется конечно. Помню некоторые компании его на серверах стали использовать.
     
  • 2.37, мяв (?), 01:29, 20/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    да. большая часть фдройда - на котлине.
    каждое 1е приложение, я б сказалп.
     
     
  • 3.39, Аноним (39), 05:03, 20/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Это неправда.
     

  • 1.28, зомбированный (?), 22:35, 19/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    жаль, что Visual J# забросили - это бьыло лучшее от С# u Java...
     
  • 1.40, Аноним (39), 05:05, 20/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >За исключением удаления некоторых устаревших возможностей в Java SE 24 сохранена обратная совместимость с прошлыми выпусками платформы Java - большинство ранее написанных Java-проектов без изменений будут работоспособны при запуске под управлением новой версии.

    У меня есть обратный опыт.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру