Java 9 funkciók és fejlesztések

A Project Jigsaw és a Java 9 legfontosabb szolgáltatásai alatt kifejlesztett moduláris keretrendszer a JShell (REPL eszköz), fontos API-változások és JVM-szintű változtatások.

A Java 9 és a Java 9 szolgáltatások kiadása mérföldkő a Java ökoszisztémában.Az új kiadásokkal való lépéstartás fontos ahhoz, hogy naprakész legyünk a technológiával, és megértsük, hogy a bevezetések mögött mi szükség van, közelebb kerülünk a .A Project Jigsaw keretében kifejlesztett moduláris keretrendszer része lesz ennek a Java SE kiadásnak, és ennek főbb jellemzői a JShell (REPL eszköz), a fontos API-változtatások és a JVM-szintű változtatások a JVM teljesítményének és hibakereshetőségének javítása érdekében.



Mielőtt részletesen kibontanánk a Java 9 szolgáltatásait, vessünk egy pillantást a korábbi Java verziókra, és nézzük meg, melyek voltak a hiányosságok és hogyan segített a Java 9 ezeknek a rendellenességeknek a leküzdésében: -



  • A Java Standard Edition platform és a JDK nem volt navigálható kis számítástechnikai eszközök számára
  • A JDK nem volt általános biztonságban és karbantartásban
  • Az alkalmazás teljesítményében nem történt általános javulás
  • A Java fejlesztők számára nehéz volt létrehozni és fenntartani a kódtárakat és a nagyobb alkalmazásokat, mind a Java SE, mind az EE platformok számára

Ebben a blogbejegyzésben a Java 9 szolgáltatásait a következő módon kategorizálom:



  1. Az API-frissítések feldolgozása a Java 9-ben
  2. HTTP / 2 kliens a Java 9-ben
  3. Java Shell parancsfájlok (Read-Eval-Print-Loop) a Java 9-ben
  4. Több kiadású JAR fájlok a Java 9 szolgáltatásban
  5. További egyidejű frissítések szolgáltatás a Java 9-ben
  6. Projekt Jigsaw Java 9-ben

Mi új a Java 9-ben?

Válogattam néhány új Java 9 funkciót, amelyekről úgy érzem, érdemes tudni. Nézzük meg, melyek ezek a funkciók: -

Az API-frissítések feldolgozása a Java 9-ben

A Java Process API meglehetősen primitív volt,csak új folyamatok elindításához, irányítsa át a folyamatok kimenetét és hibafolyamait. Ebben a kiadásban a Process API frissítései lehetővé teszik a következőket:

  • Az aktuális JVM-folyamat és a JVM által létrehozott egyéb folyamatok PID-jének megszerzése
  • Számolja fel a rendszerben futó folyamatokat, hogy információkat szerezzen, például PID, név és erőforrás-felhasználás
  • A folyamatfák kezelése
  • Alfolyamatok kezelése

Nézzünk meg egy mintakódot, amely kinyomtatja az aktuális PID-t és az aktuális folyamatadatokat:



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

HTTP / 2 kliens a Java 9-ben

Ez a Java 9 szolgáltatás várhatóan megváltozik a későbbi kiadásokban, és akár teljesen eltávolítható is.

Korábban A fejlesztők gyakran igénybe vesznek harmadik féltől származó könyvtárakat, például Apache HTTP, Jersey stb. Ezen felül a Java HTTP API-ja megelőzi a HTTP / 1.1 specifikációt, szinkron és nehezen karbantartható. Ezek a korlátozások szükségessé tették egy új API hozzáadását. Az új HTTP kliens API a következőket biztosítja:

  • Egyszerű és tömör API a legtöbb HTTP kérés kezelésére
  • A HTTP / 2 specifikáció támogatása
  • Jobb teljesítmény
  • Jobb biztonság
  • Néhány további fejlesztés

Lássunk egy mintakódot, amellyel HTTP GET-kérelmet küldhetünk az új API-k segítségével. Az alábbiakban a modul-info.java fájlban definiált moduldefiníció található:

modul új jellemzői {jdk.incubator.httpclient szükséges}

Az alábbi kód a HTTP Client API-t használja, amely a jdk.incubator.httpclient modul része:

névtér a c ++ - ban
import jdk.incubator.http. * import java.net.URI public class Http2Feature {public static void main (String [] args) dobja a Kivételt {HttpClient client = HttpClient.newBuilder (). build () HttpRequest request = HttpRequest .newBuilder ( új 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 ('Állapotkód:' + response.statusCode ())
System.out.println ('Response Body:' + response.body ())}}}

Java Shell parancsfájlok (Read-Eval-Print-Loop) a Java 9-ben

Biztosan látta, hogy olyan nyelvek, mint a Ruby, a Scala, a Groovy, a Clojure és mások szállítanak egy eszközzel, amelyet gyakran hívnak REPL ( Olvassa-értékelje-nyomtassa-hurok ). Ez a REPL eszköz rendkívül hasznos a nyelvi funkciók kipróbálásában. Például a Scalában írhatunk egy egyszerű Hello World programot as scala> println (“Hello World”)

Néhány előnye a JShell REPL a következő:

  • A tapasztalt fejlesztők gyorsan prototípusokat készíthetnek és kísérletezhetnek, mielőtt átvennék a fő kódbázisukba
  • A Java fejlesztők most REPL-lel büszkélkedhetnek

Futtassuk a JShell parancsot, a következő képen látható módon:

JShell Hello World példa - Java 9 - Edureka

Több kiadású JAR fájlok a Java 9 szolgáltatásban

Mostantól a JAR fájlok olyan osztályokat tartalmazhatnak, amelyek csak azon a Java verzión futtathatók, amelyhez összeállították őket. A Java platform új funkcióinak kihasználása érdekében az újabb verziókban a könyvtár fejlesztőinek ki kell adniuk könyvtáruk újabb verzióját. Hamarosan több változata lesz a könyvtárnak, amelyet a fejlesztők fenntartanak, ami rémálom lehet. Ennek a korlátnak a leküzdése érdekében a több kiadású JAR fájlok ezen Java 9 szolgáltatásai lehetővé teszik a fejlesztők számára, hogy JAR fájlokat készítsenek osztályfájlok különböző verzióival különböző Java verziókhoz.A következő példa világosabbá teszi.

Itt látható a jelenlegi JAR fájlok illusztrációja:

üveggyökér - Osztály - B.osztály - C. osztály

Így néz ki a több kiadású JAR fájl:

üveggyökér - Osztály - B.osztály - C. osztály - META-INF - verziók - 9 - Osztály - 10 - B.osztály

Az előző ábrán a JAR fájlok két Java-verzió - 9 és 10 - osztályfájljait támogatják.

Tehát, amikor a korábbi JAR-t futtatják a Java 9-en, akkor a verziók-9 mappák alatti A.class végrehajtásra kerül.

Egy olyan platformon, amely nem támogatja a több kiadású JAR fájlokat, a verziók könyvtár alatti osztályokat soha nem használják. Tehát, ha a több kiadású JAR fájlt futtatja a Java 8 rendszeren, az ugyanolyan jó, mint egy egyszerű JAR fájl futtatása.

További egyidejű frissítések szolgáltatás a Java 9-ben

Ebben a frissítésben egy új osztály, java.util.concurrent.Flow bevezetésre került, amely beágyazott felületekkel támogatja a közzététel-feliratkozás keretrendszer megvalósítását. A közzététel-feliratkozás keretrendszer lehetővé teszi a fejlesztők számára olyan komponensek felépítését, amelyek aszinkron módon képesek elfogyasztani egy élő adatfolyamot, azáltal, hogy létrehozzák az adatokat előállító kiadókat és az előfizetőket, akik előfizetéssel fogyasztják az adatokat. A négy új interfész a következő:

  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (amely megjelenítőként és előfizetőként is működik).

Projekt Jigsaw Java 9-ben

A projekt fő célja a modularitás támogatás modulok létrehozásához a Java 9-ben, majd alkalmazza ugyanezt a JDK vagyis: modulálja a JDK-t .

Néhány előnyöket nak,-nek modularitás a következő:

c ++ névtér példa
  • Erős tokozás : A modulok csak azokhoz a részekhez férhetnek hozzá, amelyeket használatra bocsátottak. Tehát a csomag nyilvános osztályai nem nyilvánosak, hacsak a csomagot nem exportálják kifejezetten a modul információs fájljában.
  • Törölje a függőségeket : A moduloknak meg kell adniuk, hogy melyik további modulokat használják a kötelező záradékon keresztül.
  • Kombinálva a modulokat egy kisebb futási idő létrehozására, amely könnyen méretezhető kisebb számítási eszközökre.
  • Megbízható : Az alkalmazások megbízhatóbbak, ha megszüntetik őket futási idő hibák . Példa:- biztosan tapasztalta, hogy az alkalmazás futás közben meghiúsult hiányzó osztályok miatt, ami azt eredményezte ClassNotFoundException .

Vannak különféle JEP-ek , amelyek a projekt részét képezik, az alábbiak szerint:

  • JEP 200 - moduláris JDK : Ez a Java platform modulrendszert alkalmazza arra, hogy a JDK-t modulok halmazává modulálja, amelyek összeállíthatók fordításkor, összeállítási időben vagy futás közben.
  • JEP 201 - moduláris forráskód : Ez modulárisan modulálja a JDK forráskódot, és javítja a buildeszközöket a modulok fordításához.
  • JEP 220 - moduláris futásidejű képek : Ez átalakítja a JDK és JRE futásidejű képeket a modulok befogadására, valamint a teljesítmény, a biztonság és a karbantarthatóság javítására.
  • JEP 260 - a legtöbb belső API-t beágyazza : Ez lehetővé teszi, hogy sok belső API-hoz hozzáférjen közvetlenül vagy reflektálás útján. A változásokhoz kötött belső API-k elérése meglehetősen kockázatos. Használatának megakadályozása érdekében modulokba foglalják őket, és csak azokat a belső API-kat teszik elérhetővé, amelyeket széles körben használnak, amíg megfelelő API nem lesz a helyén.
  • JEP 261 - modulrendszer : Ez a modulrendszer Java specifikációját hajtja végre a Java programozási nyelv, a JVM és más szabványos API-k megváltoztatásával
  • JEP 282: jlink, a Java linker : Ez lehetővé teszi a modulok csomagolását és azok függőségeit kisebb futási időkbe.

Szóval, ez a Java 9-ről és az új Java 9-es funkciókról szólt.

Most, hogy megértette a Java 9 szolgáltatásait, nézze meg a az Edureka, egy megbízható online tanulási vállalat, amelynek több mint 250 000 elégedett tanulóval rendelkező hálózata elterjedt az egész világon.

G Kérdés van nekünk? Kérjük, említse meg ennek a „Java 9” blognak a megjegyzés rovatában, és a lehető leghamarabb kapcsolatba lépünk Önnel.