Java 15 - что нового?
Новости,  Полезные советы

Java 15 — что нового?

Содержание статьи:

  1. Текстовые блоки
  2. Скрытые и запечатанные классы
  3. Сборщик мусора
  4. Другие новости
  5. И удаление старых вещей

Каждые полгода выходит новая версия. Java 15 — это еще одна версия, отличная от LTS, что означает, что она будет поддерживаться еще шесть месяцев. Так что же нового в Java 15?

Текстовые блоки

В двух предыдущих версиях эта функция находилась в фазе preview. Теперь она включена по умолчанию (JEP 378). Текстовые блоки предлагают разработчикам возможность создавать многострочные литералы, где вам не нужно использовать escape-символы для форматирования текста. Текстовые блоки будут содержать между символами «»»

Java 15 - что нового?

На практике это выглядит так:

String literal = """
Lorem ipsum dolor sit amet, \
consectetur adipiscing elit, \
sed do eiusmod tempor incididunt\
""";

Скрытые и запечатанные классы


В Java 15 появляется понятие скрытого класса, то есть класса, который не может быть использован непосредственно байт-кодом другого класса. Это не значит, что такой код не может быть использован вообще.

Скрытые классы можно будет использовать с помощью отражения. Весь механизм предназначен для использования фреймворками, которые создают классы во время выполнения. Эта функция не изменяет язык как таковой, она только расширяет API поиска с помощью метода Lookup :: defineHiddenClass.

Это не новинка, которая будет широко использоваться в повседневном программировании, но если вам это кажется интересным, то стоит взглянуть на описание из JEP 371.

Еще одна новинка, на этот раз preview, — это запечатанные классы (JEP 360). Такие классы и интерфейсы будут ограничивать то, какие другие классы или интерфейсы могут их расширять (или реализовывать). Фактически, идея состоит в том, что автор кода должен контролировать, где должна быть ответственность за реализацию, и, кроме того, иметь возможность ограничивать использование суперклассов.

Новая функция вносит изменения в язык, в документации JEP мы можем найти пример:

package com.example.geometry;
public abstract sealed class Shape
permits Circle, Rectangle, Square {...}


Добавление ключевого слова sealed и затем permits ограничит возможности расширения класса Shape в классы Circle, Rectangle, Square, перечисленные ниже. Классы, перечисленные в permits, должны находиться в одном модуле или пакете (если они входят в безымянный модуль).

Кроме того, в каждом из перечисленных в permits классов необходимо предоставить четкие правила для последующих подклассов.

Есть 3 варианта маркировки таких классов:

  • final, что завершает проблему наследования
  • sealed, что продолжает тему
  • non-sealed, что снимает дополнительные ограничения в создании иерархии классов.

Аналогично обстоит дело с интерфейсами.

Java 15 - что нового

Следующая итерация preview-записи и сопоставление с шаблоном
В Java 15 попали две функции, которые помечены как «second preview» (JEP 384) и pattern matching for instanceof (JEP 375).


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

Добавлена возможность создания локальных записей, так же, как это можно сделать с локальными классами. Записи также можно использовать с опечатанными интерфейсами — небольшое удобство здесь в том, что записи определены как „final” снизу, что экономит пару нажатий по клавиатуре.

Дальнейшие улучшения также включают добавление методов в Reflection API, которые позволят обрабатывать записи.

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

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

Сборщик мусора

Было бы странно, если бы в следующем выпуске Java ничего не произошло в области мусора. Из фазы тестирования и экспериментов вышли два сборщика мусора — ZGC (JEP 337) и Shenandoah (JEP 379).

ZGC разработан с учетом сборки мусора с малой задержкой. Представляя его в версии 11, команда разработчиков Java рассчитывала, что время сборки мусора составит менее 10 мс, и в настоящее время ведется работа по сокращению задержки до менее 1 мс.

С тех пор было много улучшений и поддержки для основных платформ (Windows, macOS, Linux на x86_64 и ARM 64).
С другой стороны, Shenandoah фокусируется на выполнении как можно большего количества параллельной работы, благодаря чему он также имеет короткое время сборки мусора, независимо от размера кучи. Как и ZGC, он кроссплатформенный.


Другие новости


В Java была добавлена реализация алгоритма цифровой подписи на основе кривой Эдвардса (JEP 339), или сокращенно EdDSA, который представляет собой алгоритм криптографии с открытым ключом и скрученные кривые Эдвардса.

Это интересный алгоритм подписи, потому что, в отличие от алгоритма эллиптических кривых (ECDSA), он не требует генератора псевдослучайных чисел (что важно, поскольку две подписи ECDSA с одинаковым случайным значением раскрывают закрытый ключ). Реализация соответствует RFC 8032.


В инкубаторе приземлилась еще одна итерация API Foreign-Memory Access (JEP 338), то есть API для безопасного доступа к памяти.
Недавно был реализован DatagramSocket API (JEP 373). Этот API присутствовал в Java с версии 1.0, и его поддержка была головной болью для команды Java. Таким образом, была создана оболочка, которая позволяет использовать новую реализацию и оставить старую, для систем legacy.


И удаление старых вещей

Из Java 15 вылетают:

Движок JavaScript Nashorn (JEP 372), который был помечен как устаревший с Java 11.
Порты для Solaris и Linux на SPARC (и код, специфичный для этих платформ), которые были помечены в Java 14 как устаревшие (JEP 381).


А следующие помечены как устаревшие:

Реализация Activation Remote Object (JEP 385) Biased Locking, то есть в настоящее время мало используемый механизм синхронизации (JEP 374). По умолчанию он будет отключен.

Статьи которые вас заинтересуют:

7 причин почему стоит использовать Spring для работы с REST API на Java

Трафик для арбитража

Leave a Reply

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