Выпуск функций Java 9 и Java 9 является важной вехой для экосистемы Java.Идти в ногу с новыми выпусками важно для того, чтобы оставаться в курсе последних достижений технологий, и понимание необходимости того, что будет внедряться, поможет вам приблизиться к вашему .Модульная структура, разработанная в рамках Project Jigsaw, будет частью этого выпуска Java SE, и основными его функциями являются JShell (инструмент REPL), важные изменения API и изменения на уровне JVM для повышения производительности и отлаживаемости JVM.
Прежде чем мы подробно расскажем о функциях Java 9, давайте взглянем на предыдущие версии Java и посмотрим, какие были недостатки и как Java 9 помогла преодолеть эти аномалии:
- Платформа Java Standard Edition и JDK не были доступны для небольших вычислительных устройств.
- Не было общей безопасности и обслуживания JDK
- Не было общего улучшения производительности приложений.
- Разработчикам Java было сложно создавать и поддерживать библиотеки кода и более крупные приложения для платформ Java SE и EE.
В этом сообщении блога я классифицирую функции Java 9 следующим образом:
- Обновления API процессов в Java 9
- Клиент HTTP / 2 в Java 9
- Сценарии оболочки Java (цикл чтения-вычисления-печати) в Java 9
- Функция файлов JAR с несколькими выпусками в Java 9
- Дополнительная функция параллельных обновлений в Java 9
- Проект Jigsaw на Java 9
Что нового в Java 9?
Я выбрал несколько новых функций Java 9, о которых, как мне кажется, стоит знать. Давайте посмотрим, что это за особенности: -
Обновления API процессов в Java 9
Java Process API был довольно примитивным,с поддержкой только для запуска новых процессов, перенаправить вывод процессов и потоки ошибок. В этом выпуске обновления Process API позволяют:
- Получение PID текущего процесса JVM и любых других процессов, порожденных JVM
- Перечислить процессы, запущенные в системе, чтобы получить такую информацию, как PID, имя и использование ресурсов.
- Управление деревьями процессов
- Управление подпроцессами
Давайте посмотрим на пример кода, который печатает текущий PID, а также информацию о текущем процессе:
открытый класс NewFeatures {public static void main (String [] args) {ProcessHandle currentProcess = ProcessHandle.current () System.out.println ('PID:' + currentProcess.getPid ()) ProcessHandle.Info currentProcessInfo = currentProcess.info () System.out.println ('Информация:' + currentProcessInfo)}
Клиент HTTP / 2 в Java 9
Ожидается, что эта функция Java 9 изменится в последующих выпусках и может быть даже полностью удалена.
Ранее Разработчики часто прибегают к использованию сторонних библиотек, таких как Apache HTTP, Jersey и так далее. В дополнение к этому, Java HTTP API предшествует спецификации HTTP / 1.1, является синхронным и сложным в обслуживании. Эти ограничения потребовали добавления нового API. Новый клиентский API HTTP предоставляет следующее:
- Простой и лаконичный API для обработки большинства HTTP-запросов.
- Поддержка спецификации HTTP / 2
- Лучшая производительность
- Лучшая безопасность
- Еще несколько улучшений
Давайте посмотрим на пример кода для выполнения HTTP-запроса GET с использованием новых API. Ниже приведено определение модуля, определенное в файле module-info.java:
модуль newfeatures {требуется jdk.incubator.httpclient}
В следующем коде используется HTTP Client API, который является частью модуля jdk.incubator.httpclient:
import jdk.incubator.http. * import java.net.URI публичный класс Http2Feature {public static void main (String [] args) выдает исключение {HttpClient client = HttpClient.newBuilder (). build () HttpRequest request = HttpRequest .newBuilder ( новый URI (http://httpbin.org/get)) .GET () .version (HttpClient.Version.HTTP_1_1) .build () HttpResponse.String response = client.send (request, HttpResponse.BodyHandler.asString ()) System.out.println ('Код состояния:' + response.statusCode ())
System.out.println ('Тело ответа:' + response.body ())}}}
Сценарии оболочки Java (цикл чтения-вычисления-печати) в Java 9
Вы, должно быть, видели языки, такие как Ruby, Scala, Groovy, Clojure и другие, поставляемые с инструментом, который часто называют REPL ( Читать-Eval-Print-Loop ). Этот инструмент REPL чрезвычайно полезен при тестировании языковых функций. Например, в Scala мы можем написать простую программу Hello World как scala> println («Привет, мир»)
Некоторые из преимуществ JShell REPL являются следующими:
- Опытные разработчики могут быстро создать прототип и поэкспериментировать, прежде чем использовать его в своей основной кодовой базе.
- Разработчики Java теперь могут похвастаться REPL
Давайте запустим команду JShell, как показано на следующем изображении:
Функция файлов JAR с несколькими выпусками в Java 9
На данный момент файлы JAR могут содержать классы, которые могут работать только в той версии Java, для которой они были скомпилированы. Чтобы использовать новые функции платформы Java в новых версиях, разработчики библиотеки должны выпустить более новую версию своей библиотеки. Вскоре разработчики будут поддерживать несколько версий библиотеки, что может стать кошмаром. Чтобы преодолеть это ограничение, эти функции Java 9 для файлов JAR с несколькими выпусками позволяют разработчикам создавать файлы JAR с разными версиями файлов классов для разных версий Java.Следующий пример проясняет это.
настройка eclipse для java
Вот иллюстрация текущих файлов JAR:
корень банки - Класс - B. класс - C. класс
Вот как выглядят файлы JAR с несколькими выпусками:
корень банки - Класс - B. класс - C. класс - МЕТА-ИНФ - версии - 9 - Класс - 10 - B. класс
На предыдущей иллюстрации файлы JAR поддерживают файлы классов для двух версий Java - 9 и 10.
Таким образом, когда более ранний JAR выполняется на Java 9, для выполнения выбирается класс A.class из папок версии - 9.
На платформе, которая не поддерживает файлы JAR с несколькими выпусками, классы в каталоге версий никогда не используются. Итак, если вы запустите файл JAR с несколькими выпусками на Java 8, это будет все равно, что запустить простой файл JAR.
Дополнительная функция параллельных обновлений в Java 9
В этом обновлении появился новый класс, java.util.concurrent.Flow был представлен, который имеет вложенные интерфейсы, поддерживающие реализацию структуры публикации-подписки. Платформа публикации-подписки позволяет разработчикам создавать компоненты, которые могут асинхронно потреблять поток данных в реальном времени, путем настройки издателей, которые производят данные, и подписчиков, которые потребляют данные через подписку, которая управляет ими. Четыре новых интерфейса следующие:
- java.util.concurrent.Flow.Publisher
- java.util.concurrent.Flow.Subscriber
- java.util.concurrent.Flow.Subscription
- java.util.concurrent.Flow.Processor (который действует как издатель и как подписчик).
Проект Jigsaw на Java 9
Основная цель этого проекта - представить концепцию модульность поддержка для создания модулей в Java 9, а затем применить то же самое к JDK это, модулировать JDK .
Некоторые из льготы из модульность являются следующими:
- Сильная инкапсуляция : Модули могут получить доступ только к тем частям модуля, которые были доступны для использования. Таким образом, общедоступные классы в пакете не являются общедоступными, если пакет явно не экспортирован в файл информации о модуле.
- Очистить зависимости : Модули должны объявлять, какие другие модули они будут использовать, с помощью предложения requires.
- Комбинирование модулей для создания меньшего времени выполнения, которое можно легко масштабировать на меньшие вычислительные устройства.
- Надежный : Приложения более надежны за счет исключения время выполнения ошибки . Пример:- вы должны были столкнуться с ошибкой приложения во время выполнения из-за отсутствия классов, что привело ClassNotFoundException .
Есть разные JEP , которые являются частью этого проекта, а именно:
- JEP 200 - модульный JDK : Это применяет систему модулей платформы Java для разбиения JDK на набор модулей, которые можно комбинировать во время компиляции, сборки или выполнения.
- JEP 201 - модульный исходный код : Это разбивает исходный код JDK на модули и расширяет инструменты сборки для компиляции модулей.
- JEP 220 - модульные образы среды выполнения : Это реструктурирует образы среды выполнения JDK и JRE для размещения модулей и повышения производительности, безопасности и удобства обслуживания.
- JEP 260 - инкапсулирует большинство внутренних API : Это позволяет получить доступ ко многим внутренним API напрямую или через отражение. Доступ к внутренним API, которые неизбежно изменятся, довольно рискован. Чтобы предотвратить его использование, они инкапсулируются в модули, и только те внутренние API, которые широко используются, становятся доступными до тех пор, пока на их место не будет подходящего API.
- JEP 261 - модульная система : Это реализует спецификацию Java модульной системы путем изменения языка программирования Java, JVM и других стандартных API.
- JEP 282: jlink, компоновщик Java : Это позволяет упаковать модули и их зависимости в меньшее время выполнения.
Итак, речь шла о Java 9 и новых функциях Java 9.
Теперь, когда вы разобрались с функциями Java 9, ознакомьтесь с от Edureka, надежной компании по онлайн-обучению с сетью из более чем 250 000 довольных учащихся по всему миру.
г у нас нет вопросов? Пожалуйста, укажите это в разделе комментариев этого блога «Java 9», и мы свяжемся с вами как можно скорее.