Состоялся релиз Java 17 с расширеной поддержкой (LTS). Предыдущая версия с расширеной поддержкой, Java 11, вышла в 2018 году.
Наиболее примечательным изменением в данной версии является то, что поддержка «запечатаных» (sealed) классов и интерфейсов вышла из стадии предварительного просмотра и признана готовой к использованию.
Запечатанные (sealed) типы — это классы или интерфейсы, накладывающие ограничения на другие классы или интерфейсы, которые могут расширять или реализовывать их. Для объявления запечатанного класса или интерфейса используется модификатор sealed. Список подтипов может быть перечислен при объявлении запечатанного класса или интерфейса после ключевого слова permits. В случае если подтипы находятся в том же пакете или модуле, компилятор сам может вывести список подтипов и permits в объявлении запечатанного класса или интерфейса можно опустить.
sealed interface Color permits BiColor, TriColor { }
record BiColor(int r, int g, int b) implements Color {}
record TriColor(int r, int g, int b) implements Color {}
Реализованы спецификации:
-
JEP 306: Restore Always-Strict Floating-Point Semantics
Операции с плавающей запятой теперь будут постоянно строгими, вместо того чтобы иметь как строгую семантику с плавающей запятой (strictfp), так и слегка отличающуюся семантику с плавающей запятой по умолчанию. -
JEP 356: Enhanced Pseudo-Random Number Generators
Создан новый интерфейсRandomGeneratorи реализации для генераторов псевдослучайных чисел (PRNG):SplittableRandomGenerator,JumpableRandomGenerator,LeapableRandomGenerator,ArbitrarilyJumpableRandomGenerator. -
JEP 382: New macOS Rendering Pipeline
Добавлен новый конвейер рендеринга для macOS, использующий API Metal, в качестве альтернативы существующему конвейеру, использующему устаревший API OpenGL. -
JEP 391: macOS/AArch64 Port
Реализовано выполнение Java-кода на базе инструкций AArch64 без использования Rosetta 2. -
JEP 398: Deprecate the Applet API for Removal
Applet API помечен на удаление и будет удалён в последующих релизах. -
JEP 403: Strongly Encapsulate JDK Internals
Полностью убрана возможность ослабить строгую инкапсуляцию внутренних частей JVM; параметр--illegal-access, позволявший это сделать в предыдущих версиях, удалён. -
JEP 406: Pattern Matching for switch (Preview)
Реализован редварительный просмотр Pattern Matching для конструкцииswitch. -
JEP 407: Remove RMI Activation
Механизм активации RMI удалён. -
JEP 409: Sealed Classes
Запечатанные классы или интерфейсы ограничивают доступ к их расширению или реализации посредством явного указания классов/интерфейсов которым это разрешено. -
JEP 410: Remove the Experimental AOT and JIT Compiler
Удалена экспериментальная поддержка АОТ-компилятора. -
JEP 411: Deprecate the Security Manager for Removal
Security Manager помечен как устаревший и будет удалён в последующих версиях вместе с Applet API. -
JEP 412: Foreign Function & Memory API (Incubator)
Улучшены два ранее созданных API: Foreign-Memory Access API и Foreign Linker API. -
JEP 414: Vector API (Second Incubator)
Вторая версия для предварительного просмотра, где была улучшена производительность и реализация Vector API, включая улучшения преобразования байтовых векторов в логические массивы из них. -
JEP 415: Context-Specific Deserialization Filters
Добавлена настраиваемая фабрика фильтров для всей JVM. Эти фильтры являются динамическими и зависят от контекста, в отличие от единственного статического фильтра десериализации для всей JVM. Для обратной совместимости, если фабрика фильтров не задана, встроенная фабрика возвращает статический фильтр для всей JVM, если он был настроен.
>>> Подробности







