„Java 9“ funkcijos ir patobulinimai

Modulinė sistema, sukurta pagal „Project Jigsaw“ ir pagrindines „Java 9“ funkcijas šiame tinklaraštyje, yra „JShell“ (REPL įrankis), svarbūs API pakeitimai ir JVM lygio pakeitimai.

„Java 9“ ir „Java 9“ funkcijų išleidimas yra „Java“ ekosistemos etapas.Naujų leidimų neatsilikimas yra svarbus, norint nuolat atnaujinti savo technologijas ir suprasti poreikį, kas bus įdiegta, priartins jus prie savo .„Project Jigsaw“ sukurta modulinė sistema bus šio „Java SE“ leidimo dalis, o pagrindinės jo savybės yra „JShell“ (REPL įrankis), svarbūs API pakeitimai ir JVM lygio pakeitimai, siekiant pagerinti JVM našumą ir derinimą.

Prieš išsamiai išaiškindami „Java 9“ funkcijas pažvelkime į ankstesnes „Java“ versijas ir pažiūrėkime, kokie buvo trūkumai ir kaip „Java 9“ padėjo įveikti šias anomalijas:





  • „Java Standard Edition“ platforma ir JDK nebuvo tinkamos valdyti mažiems kompiuteriams
  • Nebuvo jokio bendro JDK saugumo ir priežiūros
  • Bendras programos veikimo pagerėjimas nebuvo
  • „Java“ kūrėjams buvo sunku sukurti ir prižiūrėti „Java SE“ ir „EE“ platformų kodų bibliotekas ir didesnes programas

Šiame tinklaraščio įraše aš suskirstysiu „Java 9“ funkcijas taip:



  1. Apdorokite API atnaujinimus „Java 9“
  2. HTTP / 2 klientas „Java 9“
  3. „Java Shell Scripting“ („Read-Eval-Print-Loop“) „Java 9“
  4. „Java 9“ kelių leidimų JAR failų funkcija
  5. Daugiau „Java 9“ lygiagretumo atnaujinimų funkcijos
  6. „Jigsaw“ projektas „Java 9“

Kas naujo „Java 9“?

Aš pasirinkau keletą naujų „Java 9“ funkcijų, kurias, manau, verta žinoti. Pažiūrėkime, kokios yra šios funkcijos: -

Apdorokite API atnaujinimus „Java 9“

„Java“ proceso API buvo gana primityvi,palaikant tik naujus procesus, nukreipti procesų išvestį ir klaidų srautus. Šiame leidime proceso API naujiniai leidžia:

  • Gauti dabartinio JVM proceso ir visų kitų JVM sukeltų procesų PID
  • Suskaičiuokite sistemoje vykstančius procesus, kad gautumėte tokios informacijos kaip PID, vardas ir išteklių naudojimas
  • Procesų medžių valdymas
  • Subprocesų valdymas

Pažvelkime į pavyzdinį kodą, kuris išspausdina esamą PID ir dabartinę proceso informaciją:



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 ('Informacija:' + currentProcessInfo)}

HTTP / 2 klientas „Java 9“

Tikimasi, kad ši „Java 9“ funkcija pasikeis vėlesniuose leidimuose ir netgi gali būti visiškai pašalinta.

Anksčiau Kūrėjai dažnai naudojasi trečiųjų šalių bibliotekomis, tokiomis kaip „Apache HTTP“, „Jersey“ ir pan. Be to, „Java“ HTTP API yra ankstesnė nei HTTP / 1.1 specifikacija ir yra sinchroniška bei sunkiai prižiūrima. Dėl šių apribojimų reikėjo pridėti naują API. Nauja HTTP kliento API suteikia:

  • Paprasta ir glausta API, skirta daugumai HTTP užklausų
  • Palaikymas HTTP / 2 specifikacijoms
  • Geresnis pasirodymas
  • Geresnis saugumas
  • Dar keli patobulinimai

Pažiūrėkime kodo pavyzdį, norėdami pateikti HTTP GET užklausą naudodami naujas API. Žemiau yra modulio apibrėžimas, apibrėžtas faile module-info.java:

modulio naujienos {reikalingas jdk.incubator.httpclient}

Šis kodas naudoja HTTP kliento API, kuri yra jdk.incubator.httpclient modulio dalis:

importuoti jdk.incubator.http. * importuoti java.net.URI viešąją klasę Http2Feature {public static void main (String [] args) meta išimtį {HttpClient klientas = HttpClient.newBuilder (). build () HttpRequest užklausa = HttpRequest .newBuilder ( naujas 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 ('Būsenos kodas:' + response.statusCode ())
System.out.println ('Response Body:' + response.body ())}}}

„Java Shell Scripting“ („Read-Eval-Print-Loop“) „Java 9“

Jūs tikriausiai matėte kalbas, tokias kaip „Ruby“, „Scala“, „Groovy“, „Clojure“ ir kitas, siunčiančias su įrankiu, kuris dažnai vadinamas ATSAKYTI ( Skaityti-vertinti-spausdinti-kilpą ). Šis REPL įrankis yra labai naudingas išbandant kalbos ypatybes. Pavyzdžiui, „Scaloje“ galime parašyti paprastą „Hello World“ programą kaip scala> println („Labas pasaulis“)

kas yra java žetonas

Kai kurie iš JShell REPL yra tokie:

  • Patyrę kūrėjai gali greitai prototipuoti ir eksperimentuoti, prieš priimdami jį į pagrindinę kodų bazę
  • „Java“ kūrėjai dabar gali pasigirti REPL

Vykdykime komandą JShell, kaip parodyta šiame paveikslėlyje:

„JShell Hello World“ pavyzdys - „Java 9“ - „Edureka“

„Java 9“ kelių leidimų JAR failų funkcija

Nuo šiol JAR failuose gali būti klasių, kurios gali veikti tik naudojant „Java“ versiją, kuriai jie buvo sukurti. Norėdami pasinaudoti naujomis „Java“ platformos funkcijomis naujesnėse versijose, bibliotekos kūrėjai turi išleisti naujesnę savo bibliotekos versiją. Netrukus bus kelios kūrėjų prižiūrimos bibliotekos versijos, kurios gali būti košmaras. Norint įveikti šį apribojimą, šios „Java 9“ daugialypių leidimų JAR failų funkcijos leidžia kūrėjams kurti JAR failus su skirtingomis klasės failų versijomis skirtingoms „Java“ versijoms.Šis pavyzdys daro jį aiškesnį.

Štai dabartinių JAR failų iliustracija:

stiklainio šaknis - Klasė - B.klasė - C.klasė

Štai kaip atrodo kelių leidimų JAR failai:

stiklainio šaknis - Klasė - B.klasė - C.klasė - META-INF - versijos - 9 - Klasė - 10 - B.klasė

Ankstesnėje iliustracijoje JAR failai palaiko dviejų „Java“ versijų - 9 ir 10 klasių failus.

Taigi, kai ankstesnis JAR yra vykdomas „Java 9“, vykdymui paimamas A. klasė pagal versijas - 9 aplankai.

Platformoje, kuri nepalaiko kelių leidimų JAR failų, versijų kataloge esančios klasės niekada nenaudojamos. Taigi, jei daugkartinį JAR failą paleisite „Java 8“, tai taip pat gerai, kaip paleisti paprastą JAR failą.

Daugiau „Java 9“ lygiagretumo atnaujinimų funkcijos

Šiame naujinime nauja klasė, java.util.concurrent.Flow buvo įdiegta įdėta sąsaja, palaikanti leidybos ir prenumeratos sistemos įgyvendinimą. „Publish-subscribe“ sistema leidžia kūrėjams kurti komponentus, kurie gali asinchroniškai sunaudoti tiesioginį duomenų srautą, įsteigdami leidėjus, kurie gamina duomenis, ir abonentus, kurie duomenis naudoja per prenumeratą, kuri juos tvarko. Keturios naujos sąsajos yra šios:

  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (kuris veikia ir kaip leidėjas, ir kaip prenumeratorius).

„Jigsaw“ projektas „Java 9“

Pagrindinis šio projekto tikslas yra pristatyti moduliškumas parama modulių kūrimui „Java 9“ ir tada tą patį pritaikykite „ JDK tai yra, moduliuoti JDK .

Kai kurie iš nauda apie moduliškumas yra tokie:

  • Stiprus kapsuliavimas : Moduliai gali pasiekti tik tas modulio dalis, kurias buvo galima naudoti. Taigi viešos paketo klasės nėra viešos, nebent paketas yra aiškiai eksportuojamas į modulio informacijos failą.
  • Išvalyti priklausomybes : Moduliai turi nurodyti, kuriuos modulius jie naudos, naudodami sąlygą „reikalauja“.
  • Sujungus modulius sukuriamas mažesnis vykdymo laikas, kurį galima lengvai pritaikyti mažesniems skaičiavimo įrenginiams.
  • Patikimas : Programos yra patikimesnės pašalinant vykdymo laikas klaidos . Pavyzdys:- jūs turėjote patirti, kad jūsų programa neveikia vykdymo metu dėl trūkstamų klasių, todėl „ClassNotFoundException“ .

Jų yra įvairių JEP , kurie yra šio projekto dalis, taip:

kaip padaryti ekrano kopiją seleno žiniatinklio tvarkyklėje naudojant Java
  • JEP 200 - modulinis JDK : Tai taikoma „Java“ platformos modulių sistemai moduliuoti JDK į modulių rinkinį, kurį galima sujungti kompiliavimo, kūrimo ar vykdymo metu.
  • JEP 201 - modulinis šaltinio kodas : Tai moduliuoja JDK šaltinio kodą į modulius ir patobulina kūrimo įrankius moduliams kompiliuoti.
  • JEP 220 - moduliniai vykdymo laiko vaizdai : Tai pertvarko JDK ir JRE vykdymo laiko vaizdus, ​​kad pritaikytų modulius ir pagerintų našumą, saugumą ir priežiūrą.
  • JEP 260 - apima daugumą vidinių API : Tai leidžia prieiti prie daugybės vidinių API tiesiogiai arba apmąstant. Prieiga prie vidinių API, kurie privalo pasikeisti, yra gana rizikinga. Siekiant užkirsti kelią jo naudojimui, jie yra sujungiami į modulius ir tik tos plačiai naudojamos vidinės API yra prieinamos, kol jos vietoje nėra tinkamos API.
  • JEP 261 - modulių sistema : Tai įgyvendina modulių sistemos „Java“ specifikaciją pakeisdama „Java“ programavimo kalbą, JVM ir kitas standartines API
  • JEP 282: „Java“ nuorodos „jlink“ : Tai leidžia pakavimo modulius ir jų priklausomybę mažesnėmis eksploatavimo trukmėmis.

Taigi, viskas buvo apie „Java 9“ ir naujas „Java 9“ funkcijas.

Dabar, kai supratote „Java 9“ funkcijas, patikrinkite sukūrė patikima internetinė mokymosi įmonė „Edureka“, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą visame pasaulyje.

G ar mums klausimas? Prašau tai paminėti šio „Java 9“ tinklaraščio komentarų skyriuje, ir mes kuo greičiau susisieksime su jumis.