Публикация

Что нового в Java 15?

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

JEP 378: Text Blocks

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

В 2019 году в Java 13 уже была анонсирована в виде предварительно просмотра эта функциональность и вот в Java 15 она стала частью SDK 15.

Теперь пару слов о текстовых блоках. Ранее чтобы добавить к примеру небольшой фрагмент DOM дерева в виде строки мы бы писали что-то вроде:

String html = "<body><div><h1>Hello bcode!</h1></div><body>";

Но согласитесь что читать такой код очень не удобно, точно такой же подход мы использовали для написание JSON или SQL. Сейчас же мы можем делать это так:

String html = """
    <body>
        <div>
            <h1>Hello bcode!</h1>
        </div>
    <body>
""";

Верно, в Java 15 появились многострочные строки, которые позволяют нам представить нашу строку в отформатированном виде что упростит понимание этой строки при чтении кода.

JEP 371: Hidden Classes

Скрытые классы это классы, которые не могут быть использованы напрямую байт-кодом другими классами.

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

Также API метод sun.misc.Unsafe::defineAnonymousClass был помечен как @Deprecate и будет удален в будущем.

JEP 374: Disable and Deprecate Biased Locking

Ранее до Java 15 Biased Locking всегда был включен. Теперь Biased locking не будет включен по умолчанию, за исключением если HotSpot не запущен с флагом:

-XX:+UseBiasedLocking

Но, JDK 15 не рекомендуют использование UseBiasedLocking и в случае его активации будет выдано предупреждение о том что Biased locking более не поддерживается.

Biased locking - это метод оптимизации, используемый в HotSpot виртуальной машины для уменьшения накладных расходов, связанных с неконтролируемой блокировкой.

JEP 372: Remove the Nashorn JavaScript Engine

Nashorn JavaScript script engine удален и ранее в Java 11 API и JJS инструмент были помечены как @Deprecated .

JEP 381: Remove the Solaris and SPARC Ports

Удалена поддержка Solaris на SPARC, x64 и Linux архитектурах.

Solaris - это проприетарная операционная система Unix, первоначально разработанная Sun Microsystems.

JEP 385: Deprecate RMI Activation for Removal

Также устарел RMI Activation и был помечен на удаление в будущих обновлениях @Deprecated(forRemoval=true).

RMI Activation - механизм активации RMI позволяет службам на основе RMI экспортировать заглушки, срок действия которых превышает время жизни удаленного объекта или JVM, содержащей его.

JEP 339: Edwards-Curve Digital Signature Algorithm (EdDSA)

JEP 339 вводит криптографические подписи с использованием алгоритма цифровой подписи EdDSA, как определено в RFC 8032.

EdDSA - это современный метод подписи эллиптической кривой с многочисленными преимуществами по сравнению с существующими схемами подписи JDK. SunEC провайдер добавит новые сервисы Signature, KeyFactory и KeyPairGenerator в поддержку EdDSA.

JEP 379: Shenandoah: A Low-Pause-Time Garbage Collector

Shenandoah был представлен еще в JDK 12 (JEP 189) как экспериментальная функциональность. Сейчас Shenandoah становится официальной функциональностью релиза Java 15.

Shenandoah сокращает время паузы сборщика мусора, выполняя работу по очистке одновременно с запуском потоков Java. Время паузы Shenandoah не зависит от размера кучи, что означает, что у вас будет одинаковое постоянное время паузы, независимо от того, составляет ли ваша куча 10 МБ или 200 ГБ.

JEP 377: ZGC: A Scalable Low-Latency Garbage Collector

В JDK 11 был представлен ZGC (Z Garbage Collector) как экспериментальный. В Java 15 он становится частью релиза и выходит с экспериментального состояния.

JEP 384: Records (Second Preview)

Создавая дата классы мы часто заботимся о малозначимых вещах таких как конструкторы, getters и setters, equals(), hashCode(), toString() и так далее, вместо того чтобы заботится о представлении данных этим классом.

Для решение этой проблемы Java 14 предоставила функциональность с Record классами в виде первого предварительно просмотра.

В Java 15 Record классы все еще в стадии предварительно просмотра но с небольшими изменениями которые относятся к Sealed классам.

JEP 360: Sealed Classes (Preview)

JEP 360 предоставляет новый способ ограничить реализацию или наследование класса или интерфейса, создав Sealed Class или интерфейс. Это очень явное ограничение, чем использование механизмов final или package-private.

Для этих целей был введено новое ключевое слово permits :

public sealed class Shape permits Square {
  ...
}

public non-sealed class Square extends Shape {
  ...
}

public class Pyramid extends Shape {
  ...
}

если мы попытаемся скомпилировать этот код, то мы получим ошибку. Так как класс пирамида (Pyramid) не имеет разрешения на расширение класса фигуры (Shape).

Также подкласс наследующий sealed класс должен быть явно указан как non-sealed или final класс.

Аналогично это работает и для интерфейсов и Record классов.

JEP 375: Pattern Matching for instanceof (Second Preview)

Pattern matching был представлен в JDK 14 и пока все еще в стадии предварительного просмотра.

Pattern Matching позволяет нам instanceof прям в условии if объявить переменную, и если условие выполняется, то переменная уже будет содержать значение переменное instanceof.

var st = "bcode.dev"
if (st instanceof String s) System.out.println("It's a string!")

JEP 383: Foreign-Memory Access API (Second Incubator)

Впервые API было представлено как инкубаторная фича в Java 14. В Java 15 все еще находится в инкубаторе с небольшими нововведениями.

Предоставляет API позволяющее коду Java для безопасно и эффективно получать доступ к внешней памяти за пределами хипа.

Опубликовано: 12 мая 2021 г.Просмотров: 76

Комментарии

Мы не даем слово анониму 😶
Войдите, пожалуйста.

Еще никто не комментировал эту публикацию 🤔