Множество интересных функций Выпуск Java 18 запланирован на 22 марта 2022 года, и ждать осталось недолго.
Релиз уже несколько дней находится на второй фазе стабилизации, а это значит, что список возможностей уже завершен, а значит, пора обратить на них наше внимание.
Важно понимать, что версии, которые выходят между выпусками LTS, в частности, помогают опробовать новые функции и посмотреть, будут ли они приняты сообществом.
Компании, если решат перейти на обновление, чаще всего будут ждать полной многолетней поддержки.
Поэтому в 18 версии будет несколько JEP в виде превью и инкубаторов, которые разработчики будут тестировать и давать отзывы.
И в готовом виде эти улучшения войдут в 22-ю версию Java. Теперь у нас есть возможность опробовать новый функционал и понять, насколько он полезен.
И есть что попробовать! В этой статье мы рассмотрим новые JEP и объясним, что они делают и что они делают.
Новые возможности Java 18
JEP 400: использование UTF-8 по умолчанию
Что это: Многие API (включая стандартные API Java) используют в приложениях так называемый «набор символов по умолчанию».Какой именно, зависит от платформы, будь то Windows, Linux, Mac или другая ОС.
Более того, та же самая кодировка использовалась для сохранения исходных файлов .
java. С 18-й Явы по умолчанию всегда UTF-8 .
Зачем это нужно: В некоторых случаях (особенно если речь шла об азиатских языках и иероглифах) одно и то же приложение, запущенное разными пользователями (даже на одной машине), могло привести к повреждению текста.
Если виртуальная машина считает кодировкой по умолчанию UTF-8, а программа написана, например, на UTF-16, то это может превратить выводимый текст в тарабарщину или даже повлиять на работу компилятора javac. Кстати, об этом стоит помнить при переходе с более ранних версий Java™, который может потребовать перекодирования исходных файлов.
Но начиная с 18 версии эта проблема исчезнет. А при необходимости всегда можно вручную установить другую кодировку по умолчанию.
JEP 408: Простой веб-сервер
Что это: Появится в Java легкий веб-сервер , который можно запустить с помощью простой команды $jwebserver Зачем это нужно: Для тестирования, прототипирования и обучения.Встроенный сервер, конечно, не предназначен для замены промышленных веб-серверов в конечном продукте.
Но теперь нет необходимости настраивать их только для того, чтобы проверить, работает ли бизнес-логика.
Вы можете программно создавать новые и настраивать существующие обработчики адресов.
JEP 413: фрагменты кода в документации Java API
Что это: Добавлен новый тег @snippet , который используется в комментариях к коду.Если вы пометите им часть комментария, компилятор проверит его и отформатирует, как если бы это был реальный код. Зачем это нужно: Для вашего удобства! Код в комментариях может содержать кучу ошибок, связанных с человеческим фактором — в первую очередь опечатки.
Конечно, компилятор не сможет превратить плохой код в хороший, но он напомнит вам о пропущенной скобке.
А хорошие, читаемые комментарии могут сэкономить часы работы при анализе чужого и даже вашего собственного кода.
JEP 416: новая реализация Core Reflection через MethodHandle
Что это: Механизм отражения был переписан.поверх MethodHandles, которые заменяют генерацию байт-кода для Method::invoke, Constructor::newInstance, Field::get и Field::set. Зачем это нужно: За безопасность и скорость, а также за развитие проекта Валгалла.
До этого использовались три механизма API java.lang.reflect: нативные методы виртуальной машины, динамически генерируемые заглушки байт-кода в сочетании с доступом к полям через Unsafe и, собственно, хэндлы методов.
Такое разнообразие сложно поддерживать при добавлении новых функций, таких как примитивные классы и дженерики с поддержкой примитивов.
Сейчас механизм с использованием нативных методов используется только на раннем этапе запуска виртуальной машины.
Чтобы повысить производительность отражения в горячем коде, рекомендуется хранить экземпляры метода, конструктора и поля в статических конечных полях, чтобы JIT оптимизировал их как константы.
JEP 417: Vector API (третий инкубатор)
Что это: Векторный API , представленный в Java 16, в некоторых случаях помогает значительно повысить производительность приложений.Это позволяет вам вручную писать независимые от платформы векторные алгоритмы на Java™, когда существующая автоматическая векторизация цикла HotSpot не работает для сложного кода.
Зачем это нужно: Выполнение определенных вычислений в таких областях, как финансовые транзакции, машинное обучение и криптография.
Эта версия API находится на третьем этапе инкубатора, согласно отзывам сообщества.
Он содержит новые функции, включая поддержку инструкций ARM Scalable Vector Extension (SVE) и повышенную эффективность векторных операций, которые принимают маски на архитектурах, поддерживающих маскирование аппаратно.
JEP 418: Интерфейс поставщика услуг для разрешения сетевых адресов
Что это: В настоящее время Java™ использует API java.net.InetAddress для разрешения имен хостов Интернет-протокола (IP).Он, в свою очередь, использует механизм разрешения адресов посредством системного вызова ОС.
Обычно он работает с файлом хостов в сочетании с DNS (системой доменных имен).
Этот JEP реализует Интерфейс поставщика услуг (SPI) и ряд новых классов, позволяющих API java.net.InetAddress использовать другие механизмы разрешения адресов.
Зачем это нужно: Для тестирования, настройки и внедрения DNS на клиенте без выполнения потока операционной системы.
Это позволяет, например, эффективно использовать проект Loom, в котором обработка сетевых запросов не будет мешать одновременной работе множества виртуальных потоков.
JEP 419: API внешних функций и памяти (второй инкубатор)
Что это: Улучшение функции, представленной в более ранней версии для замена Java Native Interface (JNI) на более продвинутую модель разработки используя чистый код Java™.Этот JEP позволит вам подключать собственные библиотеки, вызывать внешние функции и получать более эффективный доступ к памяти вне кучи.
Во втором режиме инкубации были добавлены новые носители, такие как boolean и MemoryAddress, упрощены API для получения нисходящих вызовов MethodHandles (Java→native) и для управления временными с наши зависимости областей ресурсов.
Представлен обобщенный API-интерфейс разыменования для MemorySegment и MemoryAddress. Зачем это нужно: Для удобного взаимодействия с библиотеками, написанными на других языках.
При таком взаимодействии становится возможным использовать современные Java-идиомы, например, параллельные потоки при передаче данных.
JEP 420: Сопоставление шаблонов для переключателя (второй предварительный просмотр)
Что это: Еще одно обновление существующей функции, которая позволяет проверять выражения по разным шаблонам, выполняя определенное действие для каждого из них .Раньше эта функция была представлена в режиме предварительного просмотра, а теперь в нее внесены два улучшения.
Во-первых, тест на доминирование требует, чтобы константная метка оператора case всегда предшествовала защищенному экземпляру того же типа.
Это позволяет выражению селектора сопоставлять несколько меток в блоке переключателя.
Кроме того, можно использовать любой тип ссылки.
Взгляните на этот пример:
Теги: #программирование #java #dns #кодирование #сопоставление с образцом #reflection #веб-сервер #java18 #фрагмент #vector api #finalizerstatic void error(Object o) { switch(o) { case CharSequence cs -> System.out.println("A sequence of length " + cs.length()); case String s ->
-
Создание Консоли Управления Mmc
19 Oct, 24 -
Странная Повторяющаяся Вещь С Chrome
19 Oct, 24 -
Code Game Challenge — Набор Участников
19 Oct, 24 -
Современные Профессии
19 Oct, 24