Характеристики и подобрения на 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 Shell Scripting (Read-Eval-Print-Loop) в Java 9
  4. Функцията за JAR файлове с множество версии в Java 9
  5. Още функции за актуализиране на паралелната валута в Java 9
  6. Проектирайте мозайката в Java 9

Какво е новото в Java 9?

Избрах няколко нови функции на Java 9, за които смятам, че си заслужава да се знаят. Нека да видим кои са тези характеристики: -

Обработвайте актуализации на API в Java 9

API на процеса на Java е доста примитивен,с поддръжка само за стартиране на нови процеси, пренасочва изхода на процесите и потоците грешки. В тази версия актуализациите на 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, Джърси и т.н. В допълнение към това, HTTP API на Java предшества спецификацията HTTP / 1.1 и е синхронен и труден за поддръжка. Тези ограничения изискват необходимостта от добавяне на нов API. Новият API на HTTP клиент предоставя следното:

  • Прост и кратък API за справяне с повечето HTTP заявки
  • Поддръжка за спецификация HTTP / 2
  • По-добро представяне
  • По-добра сигурност
  • Още няколко подобрения

Нека да видим примерен код за отправяне на HTTP GET заявка с помощта на новите API. По-долу е дефиницията на модула, дефинирана във файла module-info.java:

модул newfeatures {изисква jdk.incubator.httpclient}

Следният код използва API на HTTP клиент, който е част от модула jdk.incubator.httpclient:

как да зададете classpath в java -
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 Shell Scripting (Read-Eval-Print-Loop) в Java 9

Трябва да сте виждали езици, като Ruby, Scala, Groovy, Clojure и други, доставящи се с инструмент, който често се нарича ОТГОВОРИ ( Read-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.Следващият пример го прави по-ясен.

Ето илюстрация на текущите JAR файлове:

корен от буркан - Клас - Б.клас - C.клас

Ето как изглеждат многократните JAR файлове:

корен от буркан - Клас - Б.клас - C.клас - МЕТА-ИНФ - версии - 9 - Клас - 10 - Б.клас

В предишната илюстрация 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 (който действа едновременно като Издател и Абонат).

Проектирайте мозайката в Java 9

Основната цел на този проект е да представи концепцията за модулност поддържа за създаване на модули в Java 9 и след това да приложите същото към JDK това е, модулирайте JDK .

Някои от Ползи на модулност са както следва:

system.exit (0) може да се използва за прекратяване на програмата.
  • Силно капсулиране : Модулите имат достъп само до онези части от модула, които са били предоставени за използване. Така че публичните класове в даден пакет не са публични, освен ако пакетът не е изрично експортиран в информационния файл на модула.
  • Ясни зависимости : Модулите трябва да декларират кои други модули биха използвали чрез клаузата за изисква.
  • Комбиниране на модули за създаване на по-малко време на изпълнение, което може лесно да се мащабира до по-малки изчислителни устройства.
  • Надежден : Приложенията са по-надеждни чрез премахване време на изпълнение грешки . Пример: - трябва да сте преживели неуспех на приложението си по време на изпълнение поради липсващи класове, в резултат на което ClassNotFoundException .

Има различни JEP , които са част от този проект, както следва:

  • JEP 200 - модулен JDK : Това прилага модулната система на платформата Java за модулиране на JDK в набор от модули, които могат да се комбинират по време на компилиране, време на изграждане или време на изпълнение.
  • JEP 201 - модулен изходен код : Това модулира JDK изходния код в модули и подобрява инструментите за изграждане за компилиране на модулите.
  • JEP 220 - модулни изображения по време на работа : Това преструктурира изображенията за изпълнение на JDK и JRE, за да побере модули и да подобри производителността, сигурността и поддръжката.
  • JEP 260 - капсулира повечето вътрешни API : Това позволява достъп до много вътрешни API-та директно или чрез отражение. Достъпът до вътрешни API, които са длъжни да се променят, е доста рискован. За да се предотврати използването му, те се капсулират в модули и се предоставят само тези вътрешни приложни програмни интерфейси, които се използват широко, докато на мястото му е подходящ API.
  • JEP 261 - модулна система : Това изпълнява спецификацията на модулната система Java чрез промяна на езика за програмиране Java, JVM и други стандартни API
  • JEP 282: jlink, Java linker : Това позволява модулите за опаковане и техните зависимости да бъдат по-малки.

И така, всичко беше свързано с Java 9 и новите функции на Java 9.

След като разбрахте функциите на Java 9, разгледайте от Edureka, доверена компания за онлайн обучение с мрежа от над 250 000 доволни учащи, разпространени по целия свят.

G От въпрос за нас? Моля, споменете го в раздела за коментари на този блог „Java 9“ и ние ще се свържем с вас възможно най-скоро.