Java 9-funksjoner og forbedringer



Det modulære rammeverket som er utviklet under Project Jigsaw og store Java 9-funksjoner i denne bloggen, er JShell (REPL-verktøy), viktige API-endringer og JVM-nivåendringer.

Utgivelsen av Java 9 og Java 9-funksjoner er en milepæl for Java-økosystemet.Det er viktig å holde deg oppdatert med nye utgivelser for å holde deg oppdatert på teknologien og forstå behovet bak det som blir introdusert, vil føre deg nærmere din .Det modulære rammeverket som er utviklet under Project Jigsaw, vil være en del av denne Java SE-utgivelsen, og de viktigste funksjonene i dette er JShell (REPL-verktøyet), viktige API-endringer og JVM-nivåendringer for å forbedre ytelsen og feilsøking av JVM.

Før vi avslører Java 9-funksjonene i detalj, la oss ta en titt på tidligere Java-versjoner og se hva som var manglene, og hvordan Java 9 bidro til å overvinne disse uregelmessighetene: -





modellvisningskontroller i java
  • Java Standard Edition-plattformen og JDK var ikke navigerbare for små databehandlingsenheter
  • Det var ingen generell sikkerhet og vedlikehold av JDK
  • Det var ingen generell forbedring i applikasjonsytelsen
  • Det var vanskelig for Java-utviklere å bygge og opprettholde kodebibliotekene og større applikasjoner, både for Java SE- og EE-plattformene.

I dette blogginnlegget vil jeg kategorisere Java 9-funksjoner på følgende måte:



  1. Behandle API-oppdateringer i Java 9
  2. HTTP / 2-klient i Java 9
  3. Java Shell Scripting (Read-Eval-Print-Loop) i Java 9
  4. JAR-filer med flere utgivelser har Java 9
  5. Flere samtidige oppdateringer har Java 9
  6. Project Jigsaw i Java 9

Hva er nytt i Java 9?

Jeg har valgt noen få nye Java 9-funksjoner, som jeg føler er verdt å vite om. La oss se hva som er disse funksjonene: -

Behandle API-oppdateringer i Java 9

Java's Process API har vært ganske primitivt,med støtte bare for å starte nye prosesser, omdirigere prosessenes utdata og feilstrømmer. I denne utgivelsen muliggjør oppdateringene av prosess-API følgende:

  • Få PID for den nåværende JVM-prosessen og andre prosesser som er skapt av JVM
  • Oppregne prosessene som kjører i systemet for å få informasjon som PID, navn og ressursbruk
  • Administrere prosess trær
  • Administrere underprosesser

La oss se på en eksempelkode som skriver ut gjeldende PID så vel som gjeldende prosessinformasjon:



offentlig klasse 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-klient i Java 9

Denne Java 9-funksjonen forventes å endre seg i de påfølgende utgivelsene og kan til og med bli fjernet fullstendig.

Tidligere Utviklere bruker ofte tredjepartsbiblioteker, for eksempel Apache HTTP, Jersey og så videre. I tillegg til dette, er Java’s HTTP API forut for HTTP / 1.1-spesifikasjonen og er synkron og vanskelig å vedlikeholde. Disse begrensningene krevde behovet for å legge til et nytt API. Den nye HTTP-klienten API gir følgende:

  • En enkel og kort API for å håndtere de fleste HTTP-forespørsler
  • Støtte for HTTP / 2-spesifikasjon
  • Bedre ytelse
  • Bedre sikkerhet
  • Noen forbedringer til

La oss se en eksempelkode for å lage en HTTP GET-forespørsel ved hjelp av de nye API-ene. Nedenfor er moduldefinisjonen definert i filen module-info.java:

modul newfeatures {krever jdk.incubator.httpclient}

Følgende kode bruker HTTP Client API, som er en del av jdk.incubator.httpclient-modulen:

import jdk.incubator.http. * import java.net.URI public class Http2Feature {public static void main (String [] args) throw Exception {HttpClient client = HttpClient.newBuilder (). build () HttpRequest request = HttpRequest .newBuilder () ny URI (http://httpbin.org/get)) .GET () .version (HttpClient.Version.HTTP_1_1) .build () HttpResponse.String response = client.send (forespørsel, HttpResponse.BodyHandler.asString ()) System.out.println ('Status code:' + response.statusCode ())
System.out.println ('Respons Body:' + response.body ())}}}

Java Shell Scripting (Read-Eval-Print-Loop) i Java 9

Du må ha sett språk som Ruby, Scala, Groovy, Clojure og andre som fraktes med et verktøy, som ofte kalles REPL ( Les-Eval-Print-Loop ). Dette REPL-verktøyet er ekstremt nyttig for å prøve ut språkfunksjonene. I Scala kan vi for eksempel skrive et enkelt Hello World-program som scala> println (“Hello World”)

Noen av fordelene med JShell REPL er som følger:

  • Erfarne utviklere kan raskt prototype og eksperimentere før de tar i bruk den i hovedkodebasen
  • Java-utviklere kan nå skryte av en REPL

La oss kjøre JShell-kommandoen, som vist i følgende bilde:

JShell Hello World Eksempel - Java 9 - Edureka

java algoritmer og datastrukturer

JAR-filer med flere utgivelser har Java 9

Per nå kan JAR-filer inneholde klasser som bare kan kjøres på Java-versjonen de ble kompilert for. For å utnytte de nye funksjonene på Java-plattformen på nyere versjoner, må bibliotekutviklerne gi ut en nyere versjon av biblioteket. Snart vil det være flere versjoner av biblioteket som vedlikeholdes av utviklerne, noe som kan være et mareritt. For å overvinne denne begrensningen, tillater disse Java 9-funksjonene i JAR-filer med flere utgivelser utviklere å bygge JAR-filer med forskjellige versjoner av klassefiler for forskjellige Java-versjoner.Følgende eksempel gjør det tydeligere.

Her er en illustrasjon av gjeldende JAR-filer:

krukkerot - En klasse - B. klasse - C. klasse

Slik ser JAR-filer med flere utgivelser ut:

krukkerot - En klasse - B. klasse - C. klasse - META-INF - versjoner - 9 - En klasse - 10 - B. klasse

I den foregående illustrasjonen støtter JAR-filene klassefiler for to Java-versjoner – 9 og 10.

Så når den tidligere JAR kjøres på Java 9, blir A.-klassen under versjonene - 9 mapper hentet for kjøring.

På en plattform som ikke støtter JAR-filer med flere utgivelser, brukes aldri klassene under versjonskatalogen. Så hvis du kjører JAR-filen med flere utgivelser på Java 8, er det like bra som å kjøre en enkel JAR-fil.

Flere samtidige oppdateringer har Java 9

I denne oppdateringen, en ny klasse, java.util.concurrent.Flow har blitt introdusert, som har nestede grensesnitt som støtter implementeringen av et rammeverk for publiser-abonnement. Rammeverket for publiser abonnement gjør det mulig for utviklere å bygge komponenter som asynkront kan konsumere en live datastrøm ved å sette opp utgivere som produserer dataene og abonnenter som konsumerer dataene via abonnement, som administrerer dem. De fire nye grensesnittene er som følger:

  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (som fungerer både som utgiver og abonnent).

Project Jigsaw i Java 9

Hovedmålet med dette prosjektet er å introdusere begrepet modularitet Brukerstøtte for å lage moduler i Java 9 og deretter bruke det samme på JDK det er, moduler JDK .

Noen av fordeler av modularitet er som følger:

  • Sterk innkapsling : Modulene har kun tilgang til de delene av modulen som er gjort tilgjengelig for bruk. Så de offentlige klassene i en pakke er ikke offentlige med mindre pakken eksplisitt eksporteres i modulinfofilen.
  • Fjern avhengigheter : Moduler må erklære hvilke andre moduler de vil bruke via klausulen.
  • Kombinere moduler for å skape en mindre kjøretid, som enkelt kan skaleres til mindre dataenheter.
  • Pålitelig : Applikasjoner er mer pålitelige ved å eliminere dem kjøretid feil . Eksempel:- du må ha opplevd at søknaden din mislyktes under kjøretiden på grunn av manglende klasser, noe som resulterte i ClassNotFoundException .

Det er forskjellige JEPs , som er en del av dette prosjektet, som følger:

  • JEP 200 - modulær JDK : Dette gjelder Java-plattformsmodulsystemet for å modulere JDK til et sett med moduler som kan kombineres ved kompileringstid, byggetid eller kjøretid.
  • JEP 201 - modulær kildekode : Dette modulerer JDK-kildekoden til moduler og forbedrer byggeverktøyene for å kompilere modulene.
  • JEP 220 - modulære kjøretidsbilder : Dette omstrukturerer JDK og JRE kjøretidsbilder for å imøtekomme moduler og for å forbedre ytelse, sikkerhet og vedlikeholdsevne.
  • JEP 260 - innkapsler de fleste interne API-er : Dette gjør det mulig å få tilgang til mange interne APIer direkte eller via refleksjon. Det er ganske risikabelt å få tilgang til interne API-er som vil endres. For å forhindre bruk blir de innkapslet i moduler, og bare de interne API-ene som er mye brukt blir gjort tilgjengelige til en riktig API er på plass.
  • JEP 261 - modulsystem : Dette implementerer modulsystemets Java-spesifikasjon ved å endre Java-programmeringsspråk, JVM og andre standard APIer
  • JEP 282: jlink, Java-linkeren : Dette tillater emballasjemoduler og deres avhengighet i mindre kjøretider.

Så alt handlet om Java 9 og nye Java 9-funksjoner.

Nå som du har forstått funksjonene til Java 9, sjekk ut av Edureka, et pålitelig online læringsfirma med et nettverk av mer enn 250 000 fornøyde elever spredt over hele verden.

G et spørsmål til oss? Vennligst nevn det i kommentarfeltet i denne 'Java 9' -bloggen, så kommer vi tilbake til deg så snart som mulig.