Funkcie a vylepšenia Java 9



Modulárny rámec vyvinutý v rámci projektu Jigsaw a hlavných funkcií Java 9 v tomto blogu sú JShell (nástroj REPL), dôležité zmeny API a zmeny na úrovni JVM.

Vydanie funkcií Java 9 a Java 9 je míľnikom pre ekosystém Java.Držať krok s novými vydaniami je dôležité pre udržanie si aktuálneho stavu s technológiou a pochopenie toho, čo stojí za tým, čo sa predstaví, vás priblíži bližšie k vášmu .Modulárny rámec vyvinutý v rámci projektu Jigsaw bude súčasťou tohto vydania Java SE a jeho hlavnými funkciami sú JShell (nástroj REPL), dôležité zmeny API a zmeny na úrovni JVM na zlepšenie výkonu a laditeľnosti JVM.

Predtým, ako podrobne objasníme funkcie Java 9, pozrime sa na predchádzajúce verzie Java a pozrime sa, aké boli nedostatky a ako Java 9 pomohla prekonať tieto anomálie: -





  • Platforma Java Standard Edition a JDK neboli splavné pre malé výpočtové zariadenia
  • Neexistovala celková bezpečnosť a údržba JDK
  • Nedošlo k celkovému zlepšeniu výkonu aplikácií
  • Pre vývojárov Java bolo ťažké vybudovať a udržiavať knižnice kódov a väčšie aplikácie pre platformy Java SE aj EE.

V tomto blogovom príspevku budem kategorizovať funkcie Java 9 nasledujúcim spôsobom:



previesť reťazec na dátum v jave
  1. Spracovať aktualizácie API v prostredí Java 9
  2. Klient HTTP / 2 v prostredí Java 9
  3. Skriptovanie Java Shell (Read-Eval-Print-Loop) v prostredí Java 9
  4. V Jave 9 je funkcia súborov JAR s viacerými vydaniami
  5. Funkcia viacerých aktualizácií súbežnosti v prostredí Java 9
  6. Projekt Jigsaw v Jave 9

Čo je nové v prostredí Java 9?

Vybral som niekoľko nových funkcií Java 9, o ktorých si myslím, že stoja za to o nich vedieť. Pozrime sa, aké sú tieto funkcie: -

Spracovať aktualizácie API v prostredí Java 9

Procesové rozhranie Java bolo dosť primitívne,s podporou iba na spustenie nových procesov, presmerovať výstupy procesov a chybové toky. V tomto vydaní aktualizácie rozhrania Process API umožňujú:

  • Získanie PID aktuálneho procesu JVM a akýchkoľvek ďalších procesov vytvorených JVM
  • Vymenujte procesy, ktoré bežia v systéme, aby ste získali informácie ako PID, meno a využitie prostriedkov
  • Správa stromov procesov
  • Správa podprocesov

Pozrime sa na ukážkový kód, ktorý vytlačí aktuálny PID aj aktuálne informácie o procese:



public class 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 ('Informácie:' + currentProcessInfo)}

Klient HTTP / 2 v prostredí Java 9

Očakáva sa, že sa táto funkcia Java 9 v nasledujúcich vydaniach zmení a môže byť dokonca úplne odstránená.

Skôr Vývojári sa často uchyľujú k používaniu knižníc tretích strán, ako sú napríklad Apache HTTP, Jersey a pod. Okrem toho rozhranie API HTTP v jazyku Java predchádza špecifikácii HTTP / 1.1 a je synchrónne a ťažko sa udržiava. Tieto obmedzenia si vyžiadali potrebu pridať nové API. Nové rozhranie API klienta HTTP poskytuje:

  • Jednoduché a výstižné API na riešenie väčšiny požiadaviek HTTP
  • Podpora špecifikácie HTTP / 2
  • Lepší výkon
  • Lepšia bezpečnosť
  • Niekoľko ďalších vylepšení

Pozrime sa na ukážkový kód na odoslanie požiadavky HTTP GET pomocou nových rozhraní API. Ďalej je uvedená definícia modulu definovaná v súbore module-info.java:

nové funkcie modulu {vyžaduje jdk.incubator.httpclient}

Nasledujúci kód používa rozhranie HTTP Client API, ktoré je súčasťou modulu jdk.incubator.httpclient:

import jdk.incubator.http. * import java.net.URI verejná trieda Http2Feature {public static void main (String [] args) vyvolá výnimku {HttpClient client = HttpClient.newBuilder (). build () HttpRequest request = HttpRequest .newBuilder ( nové 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 ('Stavový kód:' + response.statusCode ())
System.out.println ('Text odpovede:' + response.body ())}}}

Skriptovanie Java Shell (Read-Eval-Print-Loop) v prostredí Java 9

Určite ste už videli jazyky, ako napríklad Ruby, Scala, Groovy, Clojure a ďalšie, ktoré sa dodávajú pomocou nástroja, ktorý sa často nazýva REPL ( Read-Eval-Print-Loop ). Tento nástroj REPL je mimoriadne užitočný pri vyskúšaní jazykových funkcií. Napríklad v Scale môžeme napísať jednoduchý program Hello World ako scala> println („Hello World“)

Niektoré z výhod JShell REPL sú nasledujúce:

  • Skúsení vývojári môžu rýchlo prototypovať a experimentovať pred prijatím do svojej hlavnej kódovej základne
  • Vývojári Java sa teraz môžu pochváliť REPL

Spustíme príkaz JShell, ako je znázornené na nasledujúcom obrázku:

Príklad JShell Hello World - Java 9 - Edureka

V Jave 9 je funkcia súborov JAR s viacerými vydaniami

Odteraz môžu súbory JAR obsahovať triedy, ktoré môžu bežať iba vo verzii Java, pre ktorú boli kompilované. Aby vývojári knižnice využili nové funkcie platformy Java na novšie verzie, musia vývojári knižnice vydať novšiu verziu svojej knižnice. Vývojári budú čoskoro udržiavať niekoľko verzií knižnice, čo môže byť nočnou morou. Na prekonanie tohto obmedzenia umožňujú tieto funkcie Java 9 súborov JAR s viacerými vydaniami vývojárom vytvárať súbory JAR s rôznymi verziami súborov triedy pre rôzne verzie Java.Nasledujúci príklad to objasňuje.

Tu je ilustrácia aktuálnych súborov JAR:

skladovacia trieda c ++
jar koreň - Trieda - B.trieda - C.trieda

Takto vyzerajú súbory JAR s viacerými vydaniami:

jar koreň - Trieda - B.trieda - C.trieda - META-INF - verzie - 9 - Trieda - 10 - B.trieda

Na predchádzajúcom obrázku súbory JAR podporujú súbory triedy pre dve verzie Java - 9 a 10.

Takže keď je starší Java JAR spustený na Jave 9, je na vykonanie vybratá A.class v rámci verzií - 9 priečinkov.

Na platforme, ktorá nepodporuje súbory JAR s viacerými vydaniami, sa triedy v adresári verzií nikdy nepoužívajú. Ak teda spustíte súbor JAR s viacerými vydaniami v prostredí Java 8, je to rovnako dobré ako spustenie jednoduchého súboru JAR.

Funkcia viacerých aktualizácií súbežnosti v prostredí Java 9

V tejto aktualizácii je nová trieda java.util.concurrent.Flow bola zavedená, ktorá má vnorené rozhrania podporujúce implementáciu rámca publish-subscribe. Rámec publikovania a prihlásenia na odber umožňuje vývojárom zostavovať komponenty, ktoré môžu asynchrónne spotrebovať živý prúd údajov, a to nastavením vydavateľov, ktorí údaje produkujú, a odberateľov, ktorí údaje využívajú prostredníctvom predplatného, ​​ktoré ich spravuje. Štyri nové rozhrania sú nasledujúce:

  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (ktorý funguje ako vydavateľ aj predplatiteľ).

Projekt Jigsaw v Jave 9

Hlavným cieľom tohto projektu je predstaviť koncept modularita podpora na vytváranie modulov v Jave 9 a potom to isté aplikovať na JDK to je, modulovať JDK .

Niektoré z výhody z modularita sú nasledujúce:

  • Silné zapuzdrenie : Moduly majú prístup iba k tým častiam modulu, ktoré boli sprístupnené na použitie. Verejné triedy v balíku teda nie sú verejné, pokiaľ balíček nie je explicitne exportovaný do informačného súboru modulu.
  • Vymazať závislosti : Moduly musia deklarovať, ktoré ďalšie moduly by používali, pomocou klauzuly require.
  • Kombináciou modulov sa vytvorí menší runtime modul, ktorý sa dá ľahko rozšíriť na menšie výpočtové zariadenia.
  • Spoľahlivý : Aplikácie sú spoľahlivejšie elimináciou beh programu chyby . Príklad: - určite ste zažili zlyhanie vašej aplikácie počas behu kvôli chýbajúcim triedam, čo malo za následok ClassNotFoundException .

Existujú rôzne JEP , ktoré sú súčasťou tohto projektu, a to:

  • JEP 200 - modulárny JDK : Toto uplatňuje systémový modul platformy Java na modularizáciu JDK na množinu modulov, ktoré je možné kombinovať v čase kompilácie, času zostavenia alebo behu programu.
  • JEP 201 - modulárny zdrojový kód : Toto modularizuje zdrojový kód JDK na moduly a vylepšuje nástroje na zostavenie pre kompiláciu modulov.
  • JEP 220 - modulárne runtime obrázky : Toto reštrukturalizuje runtime obrázky JDK a JRE tak, aby vyhovovali modulom a zlepšili výkon, bezpečnosť a udržiavateľnosť.
  • JEP 260 - zapuzdruje väčšinu interných rozhraní API : Umožňuje to prístup k mnohým interným rozhraniam API priamo alebo prostredníctvom reflexie. Prístup k interným rozhraniam API, ktoré sa musia zmeniť, je dosť riskantné. Aby sa zabránilo jeho použitiu, sú zapuzdrené do modulov a iba tie interné API, ktoré sú široko používané, sú sprístupňované, kým nebude na ich mieste správne API.
  • JEP 261 - modulový systém : Týmto sa implementuje špecifikácia modulového systému Java zmenou programovacieho jazyka Java, JVM a ďalších štandardných rozhraní API
  • JEP 282: jlink, linker jazyka Java : Toto umožňuje zabalenie modulov a ich závislostí do menších časov chodu.

Toto bolo teda všetko o Java 9 a nových funkciách Java 9.

Teraz, keď ste pochopili funkcie Java 9, pozrite sa na autor: Edureka, dôveryhodná online vzdelávacia spoločnosť so sieťou viac ako 250 000 spokojných študentov rozmiestnených po celom svete.

G ot otázka pre nás? Uveďte to, prosím, v sekcii komentárov tohto blogu „Java 9“ a my sa vám ozveme čo najskôr.