Versione Java SE 18

Dopo sei mesi di sviluppo, Oracle ha rilasciato la piattaforma Java SE 18 (Java Platform, Standard Edition 18), che utilizza il progetto open source OpenJDK come implementazione di riferimento. Ad eccezione della rimozione di alcune funzionalità deprecate, Java SE 18 mantiene la retrocompatibilità con le versioni precedenti della piattaforma Java: la maggior parte dei progetti Java scritti in precedenza continuerà a funzionare senza modifiche quando viene eseguita con la nuova versione. Le build pronte per l'installazione di Java SE 18 (JDK, JRE e Server JRE) sono preparate per Linux (x86_64, AArch64), Windows (x86_64) e macOS (x86_64, AArch64). Sviluppata dal progetto OpenJDK, l'implementazione di riferimento Java 18 è completamente open source con licenza GPLv2 con eccezioni GNU ClassPath per consentire il collegamento dinamico a prodotti commerciali.

Java SE 18 è classificato come versione di supporto regolare, con aggiornamenti da rilasciare prima della versione successiva. Il ramo di supporto a lungo termine (LTS) dovrebbe essere Java SE 17, che riceverà aggiornamenti fino al 2029. Ricordiamo che a partire dal rilascio di Java 10, il progetto è passato a un nuovo processo di sviluppo, che implica un ciclo più breve per la formazione di nuove versioni. Nuove funzionalità sono ora in fase di sviluppo in un ramo principale costantemente aggiornato, che include modifiche già completate e da cui i rami vengono ramificati ogni sei mesi per stabilizzare le nuove versioni.

Le nuove funzionalità di Java 18 includono:

  • La codifica predefinita è UTF-8. Le API Java che elaborano dati di testo in base alla codifica dei caratteri ora utilizzeranno UTF-8 per impostazione predefinita su tutte le piattaforme, indipendentemente dalle impostazioni di sistema e dalle impostazioni locali. Per ripristinare il vecchio comportamento, in cui la codifica viene scelta in base alle impostazioni locali del sistema, è possibile utilizzare l'opzione "-Dfile.encoding=COMPAT".
  • Il pacchetto include il pacchetto com.sun.net.httpserver, che include l'utilità jwebserver e l'API della libreria con l'implementazione di un semplice server http per servire contenuto statico (CGI e gestori di tipo servlet non sono supportati). Il server HTTP integrato non è ottimizzato per i carichi di lavoro e non supporta il controllo degli accessi e l'autenticazione, poiché è destinato principalmente all'utilizzo nel processo di sviluppo per la prototipazione, il debug e il test di progetti.
  • JavaDoc fornisce il supporto per il tag "@snippet" per incorporare esempi funzionanti e snippet di codice nella documentazione API, dove è possibile utilizzare strumenti di convalida, evidenziazione della sintassi e integrazione IDE.
  • È stata riprogettata l'implementazione dell'API java.lang.reflect (Core Reflection), progettata per ottenere informazioni su metodi, campi e costruttori di classi, nonché l'accesso alla struttura interna delle classi. L'API java.lang.reflect stessa rimane invariata, ma è ora implementata utilizzando gli handle di metodo forniti dal modulo java.lang.invoke, invece di utilizzare generatori di bytecode. La modifica ci ha permesso di unificare le implementazioni di java.lang.reflect e java.lang.invoke e di semplificarne la manutenzione.
  • È stata proposta una terza anteprima della Vector API, che fornisce funzioni per calcoli vettoriali che vengono eseguiti utilizzando istruzioni vettoriali sui processori x86_64 e AArch64 e consentono di applicare operazioni contemporaneamente a più valori (SIMD). A differenza delle funzionalità fornite nel compilatore JIT HotSpot per la vettorizzazione automatica delle operazioni scalari, la nuova API consente di controllare esplicitamente la vettorizzazione per l'elaborazione parallela dei dati.
  • Aggiunta l'interfaccia SPI (interfaccia del fornitore di servizi) per la risoluzione di nomi host e indirizzi IP, consentendo di utilizzare risolutori alternativi in ​​java.net.InetAddress che non sono legati ai gestori offerti dal sistema operativo.
  • Viene fornita una seconda anteprima dell'API Foreign Function & Memory, che consente alle applicazioni di interagire con codice e dati all'esterno del runtime Java. La nuova API consente di chiamare in modo efficiente funzioni non JVM e accedere alla memoria non gestita da JVM. Ad esempio, è possibile chiamare funzioni da librerie condivise esterne e accedere ai dati di processo senza utilizzare JNI.
  • È stata aggiunta una seconda implementazione sperimentale del patternmatching nelle espressioni “switch”, consentendo l’utilizzo di pattern flessibili nelle etichette “case” anziché valori esatti, coprendo una serie di valori contemporaneamente, per i quali in precedenza era necessario utilizzare catene ingombranti di espressioni “if...else”. Oggetto o = 123L; Stringa formattata = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); predefinito -> o.toString(); };
  • Il meccanismo di finalizzazione e i metodi associati come Object.finalize(), Enum.finalize(), Runtime.runFinalization() e System.runFinalization() sono stati deprecati e saranno disabilitati in una versione futura.
  • I garbage collector ZGC (Z Garbage Collector), SerialGC e ParallelGC supportano la deduplicazione delle righe.

Fonte: opennet.ru

Aggiungi un commento