Funzionalità e miglioramenti di Java 9



Il framework modulare sviluppato sotto Project Jigsaw e le principali funzionalità di Java 9 in questo blog sono JShell (strumento REPL), importanti modifiche API e modifiche a livello di JVM.

Il rilascio delle funzionalità Java 9 e Java 9 è una pietra miliare per l'ecosistema Java.Tenere il passo con le nuove versioni è importante per rimanere aggiornati con la tecnologia e comprendere la necessità che sta dietro a ciò che viene introdotto ti avvicinerà al tuo .Il framework modulare sviluppato nell'ambito di Project Jigsaw farà parte di questa versione di Java SE e le sue principali caratteristiche sono JShell (strumento REPL), importanti modifiche API e modifiche a livello di JVM per migliorare le prestazioni e il debuggabilità di JVM.

Prima di svelare in dettaglio le funzionalità di Java 9, diamo uno sguardo alle versioni precedenti di Java e vediamo quali erano le carenze e come Java 9 ha contribuito a superare quelle anomalie: -





  • La piattaforma Java Standard Edition e il JDK non erano navigabili per piccoli dispositivi informatici
  • Non c'era sicurezza e manutenzione complessive di JDK
  • Non è stato riscontrato alcun miglioramento generale nelle prestazioni dell'applicazione
  • Era difficile per gli sviluppatori Java creare e mantenere le librerie di codice e le applicazioni più grandi, sia per le piattaforme Java SE che per quelle EE

come configurare eclipse per java

In questo post del blog classificherò le funzionalità di Java 9 nel modo seguente:



  1. Elaborare gli aggiornamenti delle API in Java 9
  2. Client HTTP / 2 in Java 9
  3. Java Shell Scripting (Read-Eval-Print-Loop) in Java 9
  4. Funzionalità dei file JAR a più versioni in Java 9
  5. Ulteriori funzionalità di aggiornamenti della concorrenza in Java 9
  6. Progetto Jigsaw in Java 9

Cosa c'è di nuovo in Java 9?

Ho scelto alcune nuove funzionalità di Java 9, che ritengo valga la pena conoscere. Vediamo quali sono queste caratteristiche: -

Elaborare gli aggiornamenti delle API in Java 9

L'API di processo di Java è stata piuttosto primitiva,con supporto solo per avviare nuovi processi, reindirizza l'output dei processi e i flussi di errore. In questa versione, gli aggiornamenti all'API di processo consentono quanto segue:

  • Ottenere il PID del processo JVM corrente e qualsiasi altro processo generato dalla JVM
  • Enumerare i processi in esecuzione nel sistema per ottenere informazioni come PID, nome e utilizzo delle risorse
  • Gestione degli alberi dei processi
  • Gestione dei sottoprocessi

Diamo un'occhiata a un codice di esempio, che stampa il PID corrente e le informazioni sul processo corrente:



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)}

Client HTTP / 2 in Java 9

Questa funzionalità di Java 9 dovrebbe cambiare nelle versioni successive e potrebbe anche essere rimossa completamente.

Prima Gli sviluppatori ricorrono spesso all'utilizzo di librerie di terze parti, come Apache HTTP, Jersey e così via. Oltre a ciò, l'API HTTP di Java è precedente alla specifica HTTP / 1.1 ed è sincrona e difficile da mantenere. Queste limitazioni richiedevano la necessità di aggiungere una nuova API. La nuova API client HTTP fornisce quanto segue:

  • Un'API semplice e concisa per gestire la maggior parte delle richieste HTTP
  • Supporto per la specifica HTTP / 2
  • Migliori prestazioni
  • Migliore sicurezza
  • Qualche altro miglioramento

Vediamo un codice di esempio per effettuare una richiesta HTTP GET utilizzando le nuove API. Di seguito è riportata la definizione del modulo definita nel file module-info.java:

nuove funzionalità del modulo {richiede jdk.incubator.httpclient}

Il codice seguente utilizza l'API client HTTP, che fa parte del modulo jdk.incubator.httpclient:

import jdk.incubator.http. * import java.net.URI public class Http2Feature {public static void main (String [] args) genera un'eccezione {HttpClient client = HttpClient.newBuilder (). build () HttpRequest request = HttpRequest .newBuilder ( nuovo 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 ('Codice di stato:' + response.statusCode ())
System.out.println ('Response Body:' + response.body ())}}}

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

Devi aver visto lingue, come Ruby, Scala, Groovy, Clojure e altre fornite con uno strumento, che viene spesso chiamato REPL ( Read-Eval-Print-Loop ). Questo strumento REPL è estremamente utile per provare le funzionalità del linguaggio. Ad esempio, in Scala, possiamo scrivere un semplice programma Hello World come scala> println ('Hello World')

Alcuni dei vantaggi di JShell REPL sono come segue:

  • Gli sviluppatori esperti possono prototipare e sperimentare rapidamente prima di adottarlo nella loro base di codice principale
  • Gli sviluppatori Java possono ora vantarsi di un REPL

Eseguiamo il comando JShell, come mostrato nell'immagine seguente:

Esempio di JShell Hello World - Java 9 - Edureka

Funzionalità dei file JAR a più versioni in Java 9

A partire da ora, i file JAR possono contenere classi che possono essere eseguite solo sulla versione Java per cui sono stati compilati. Per sfruttare le nuove funzionalità della piattaforma Java nelle versioni più recenti, gli sviluppatori della libreria devono rilasciare una versione più recente della loro libreria. Presto ci saranno più versioni della libreria mantenute dagli sviluppatori, il che può essere un incubo. Per superare questa limitazione, queste funzionalità Java 9 dei file JAR multi-rilascio consentono agli sviluppatori di creare file JAR con diverse versioni di file di classe per diverse versioni di Java.L'esempio seguente lo rende più chiaro.

spiegare la differenza tra oggetti mutabili e immutabili.

Ecco un'illustrazione dei file JAR correnti:

radice di vaso - Una classe - B.class - C.class

Ecco come appaiono i file JAR multi-release:

radice di vaso - Una classe - B.class - C.class - META-INF - versioni - 9 - Una classe - 10 - B.class

Nell'illustrazione precedente, i file JAR supportano i file di classe per due versioni di Java – 9 e 10.

Quindi, quando il JAR precedente viene eseguito su Java 9, le cartelle A.class nelle versioni - 9 vengono prelevate per l'esecuzione.

Su una piattaforma che non supporta i file JAR a più versioni, le classi nella directory delle versioni non vengono mai utilizzate. Quindi, se esegui il file JAR multi-release su Java 8, è come eseguire un semplice file JAR.

Ulteriori funzionalità di aggiornamenti della concorrenza in Java 9

In questo aggiornamento, una nuova classe, java.util.concurrent.Flow è stato introdotto, che ha interfacce annidate che supportano l'implementazione di un framework di pubblicazione-sottoscrizione. Il framework di pubblicazione-sottoscrizione consente agli sviluppatori di creare componenti che possono utilizzare in modo asincrono un flusso di dati in tempo reale configurando editori che producono i dati e sottoscrittori che consumano i dati tramite abbonamento, che li gestisce. Le quattro nuove interfacce sono le seguenti:

  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (che funge sia da Publisher che da Sottoscrittore).

Progetto Jigsaw in Java 9

L'obiettivo principale di questo progetto è introdurre il concetto di modularità supporto per creare moduli in Java 9 e quindi applicare lo stesso al file JDK questo è, modularizzare il JDK .

Alcuni dei benefici di modularità sono come segue:

  • Forte incapsulamento : I moduli possono accedere solo alle parti del modulo che sono state rese disponibili per l'uso. Quindi, le classi pubbliche in un pacchetto non sono pubbliche a meno che il pacchetto non venga esplicitamente esportato nel file di informazioni del modulo.
  • Cancella dipendenze : I moduli devono dichiarare quali altri moduli utilizzerebbero tramite la clausola require.
  • Combinazione di moduli per creare un runtime più piccolo, che può essere facilmente adattato a dispositivi di elaborazione più piccoli.
  • Affidabile : Le applicazioni sono più affidabili eliminando tempo di esecuzione errori . Esempio:- devi aver riscontrato un errore dell'applicazione durante il runtime a causa di classi mancanti, con conseguente ClassNotFoundException .

Ce ne sono di vari PEC , che fanno parte di questo progetto, come segue:

  • JEP 200 - JDK modulare : Applica il sistema di moduli della piattaforma Java per modularizzare JDK in una serie di moduli che possono essere combinati in fase di compilazione, in fase di compilazione o in runtime.
  • JEP 201 - codice sorgente modulare : Questo modularizza il codice sorgente JDK in moduli e migliora gli strumenti di compilazione per compilare i moduli.
  • JEP 220 - immagini runtime modulari : Questo ristruttura le immagini di runtime JDK e JRE per accogliere i moduli e migliorare le prestazioni, la sicurezza e la manutenibilità.
  • JEP 260: incapsula la maggior parte delle API interne : Ciò consente di accedere direttamente o tramite riflessione a molte API interne. L'accesso alle API interne destinate a cambiare è piuttosto rischioso. Per impedirne l'uso, vengono incapsulati in moduli e solo le API interne ampiamente utilizzate vengono rese disponibili fino a quando non viene sostituita un'API appropriata.
  • JEP 261 - sistema modulare : Implementa la specifica Java del sistema del modulo modificando il linguaggio di programmazione Java, JVM e altre API standard
  • JEP 282: jlink, il linker Java : Ciò consente di impacchettare i moduli e le loro dipendenze in tempi di esecuzione più piccoli.

Quindi, si trattava di Java 9 e delle nuove funzionalità di Java 9.

Ora che hai compreso le funzionalità di Java 9, controlla il file da Edureka, una società di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo.

G o una domanda per noi? Per favore menzionalo nella sezione commenti di questo blog 'Java 9' e ti risponderemo il prima possibile.