Возможности и улучшения Java 9



Модульная структура, разработанная в рамках Project Jigsaw, и основные функции Java 9 в этом блоге - это JShell (инструмент REPL), важные изменения API и изменения на уровне JVM.

Выпуск функций 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 следующим образом:



  1. Обновления API процессов в Java 9
  2. Клиент HTTP / 2 в Java 9
  3. Сценарии оболочки Java (цикл чтения-вычисления-печати) в Java 9
  4. Функция файлов JAR с несколькими выпусками в Java 9
  5. Дополнительная функция параллельных обновлений в Java 9
  6. Проект 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, как показано на следующем изображении:

Пример JShell Hello World - Java 9 - Edureka

Функция файлов 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», и мы свяжемся с вами как можно скорее.