Намеченный на 22 марта 2022 года релиз Java 18 находится во второй фазе стабилизации. В новой версии языка появится несколько возможностей в виде превью и инкубаторов для тестирования.
Ключевые возможности
Стандартные Java API используют в программах набор символов по умолчанию, который зависит от операционной системы. В 18-ой версии языка для всех платформ изначально будет применяться кодировка UTF-8. Изменение устраняет проблемы отображения символов и некорректной работы компилятора, которые могли возникнуть при запуске одного и того же приложения разными пользователями даже на одной виртуальной машине. При миграции с ранних версий Java стоит учитывать это обновление – может потребоваться перекодировка исходных файлов.
Стал доступен простой веб-сервер, который запускается при помощи команды $ jwebserver. Он подойдет для тестирования, прототипирования и обучения, однако не способен заменить промышленный вариант. Доступно программное создание новых обработчиков адресов и кастомизация уже существующих.
В обновленной версии добавлена новая реализация Core Reflection через MethodHandle. Механизм безопаснее и быстрее, а также упрощает добавление новых функций, таких как примитивные классы и дженерики с поддержкой примитивов. Для улучшения производительности рефлексии в горячем коде рекомендуется хранение экземпляров Method, Constructor и Field в static final полях.
Получил развитие Vector API, впервые представленный в Java 16. Интерфейс позволяет вручную писать платформенно-независимые векторные алгоритмы на Java и повышать производительность приложений. Особенно это актуально при проведении вычислений в финансовых операциях, машинном обучении и криптографии.
Прочие нововведения
- При помощи тега @snippet появилась возможность отметить часть комментария, после чего указанный участок будет валидироваться и оформляться компилятором будто это реальный код.
- Добавлен интерфейс поставщика услуг (SPI), благодаря чему API java.net.InetAddress может использовать больше механизмов разрешения адреса.
- Интерфейс Java Native Interface (JNI) заменен на более продвинутый Foreign Function & Memory API, что позволит проще подключать библиотеки, написанные на других языках, и иметь более эффективный доступ к памяти за пределами кучи.
- Обновление для конструкции switch, которое добавляет Pattern Matching для проверки выражения на соответствие различным образцам с определенным действием для каждого из них.
- Функция финализации объявлена устаревшей. В будущих релизах Java она будет удалена.