Rilascio di Java SE 17

Dopo sei mesi di sviluppo, Oracle ha rilasciato la piattaforma Java SE 17 (Java Platform, Standard Edition 17), utilizzando il progetto open source OpenJDK come implementazione di riferimento. Ad eccezione della rimozione di alcune funzionalità obsolette, Java SE 17 mantiene la compatibilità retroattiva con le versioni precedenti della piattaforma Java: la maggior parte dei progetti Java esistenti funzionerà senza modifiche sulla nuova versione. I pacchetti pronti per l'installazione di Java SE 17 (JDK, JRE e Server JRE) sono disponibili per Linux (x86_64, AArch64), Windows (x86_64) e macOS (x86_64, AArch64). L'implementazione di riferimento di Java 17, sviluppata nell'ambito del progetto OpenJDK, è completamente open source con licenza GPLv2, con eccezioni GNU ClassPath che consentono il binding dinamico con prodotti commerciali.

Java SE 17 è classificato come rilascio con supporto a lungo termine (LTS), gli aggiornamenti per il quale saranno rilasciati fino al 2029. Il rilascio di aggiornamenti per il precedente rilascio intermedio Java 16 è stato interrotto. La precedente LTS, Java 11, sarà supportata fino al 2026. Il prossimo rilascio LTS è previsto per settembre 2024. Ricordiamo che a partire dal rilascio di Java 10, il progetto è passato a un nuovo processo di sviluppo, che prevede un ciclo di vita per la creazione di nuove release più breve. La nuova funzionalità viene ora sviluppata in un ramo master costantemente aggiornato, in cui vengono incluse le modifiche già pronte e da cui ogni sei mesi si diramano rami per la stabilizzazione dei nuovi rilasci.

Tra le novità di Java 17, si possono notare:

  • È stata proposta un'implementazione sperimentale del matching pattern nelle espressioni «switch», che consente di utilizzare nei case non valori esatti, ma modelli flessibili che coprono una serie di valori, per cui in precedenza era necessario utilizzare ingombranti catene di espressioni «if…else». Inoltre, all'interno dello «switch» è stata fornita la possibilità di gestire i valori NULL. Object o = 123L; String formatted = 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); default -> o.toString(); };
  • È stata stabilizzata la supporto per classi e interfacce sigillate («sealed») che non possono essere utilizzate da altre classi e interfacce per ereditare, estendere o sovrascrivere implementazioni. Le classi sigillate forniscono anche un modo più dichiarativo per limitare l'uso della superclasse, rispetto ai modificatori di accesso, basato su un'esplicita enumerazione delle sottoclassi consentite per l'estensione. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • È stata proposta una seconda implementazione preliminare dell'API Vector, che fornisce funzionalità per i calcoli vettoriali effettuati utilizzando istruzioni vettoriali nei processori x86_64 e AArch64 e consente di applicare contemporaneamente operazioni a più valori (SIMD). A differenza delle funzionalità di autovettorizzazione delle operazioni scalari fornite dal compilatore JIT HotSpot, la nuova API offre la possibilità di gestire esplicitamente la vettorizzazione per l'elaborazione parallela dei dati.
  • È stata aggiunta un'implementazione preliminare dell'API Foreign Function & Memory, tramite la quale le applicazioni possono interagire con codice e dati esterni al runtime Java. La nuova API consente di chiamare in modo efficiente funzioni non eseguite nella JVM e accedere a memoria non gestita dalla JVM. Ad esempio, è possibile chiamare funzioni da librerie condivise esterne e accedere ai dati di un processo senza utilizzare JNI.
  • Il motore di rendering per macOS, che implementa l'API Java 2D, utilizzata a sua volta nell'API Swing, è stato adattato per utilizzare l'API grafica Metal. Di default, sulla piattaforma macOS viene ancora utilizzato OpenGL, mentre per abilitare il supporto a Metal è necessario impostare il parametro "-Dsun.java2d.metal=true" e avere almeno la versione macOS 10.14.x.
  • È stato aggiunto un porting per la piattaforma macOS/AArch64 (computer Apple basati sui nuovi chip Apple M1). Una caratteristica del porting è il supporto per il meccanismo di protezione della memoria W^X (Write XOR Execute), secondo cui le pagine di memoria non possono essere accessibili contemporaneamente in scrittura ed esecuzione. (il codice può essere eseguito solo dopo aver disabilitato la scrittura, e la scrittura in una pagina di memoria è possibile solo dopo aver disabilitato l'esecuzione).
  • È stato ripristinato l'uso della semantica solo rigorosa (strictfp) per le espressioni in virgola mobile. È stata interrotta la supporto alla semantica 'default', disponibile fin dalla release di Java 1.2, che includeva semplificazioni per il funzionamento su sistemi con processori matematici x87 molto obsoleti (dopo l'introduzione delle istruzioni SSE2 non c'è più bisogno di tale semantica).
  • Sono stati implementati nuovi tipi di interfacce per generatori di numeri pseudo-casuali, nonché algoritmi aggiuntivi per una generazione di numeri casuali di maggior qualità. Le applicazioni hanno la possibilità di scegliere l'algoritmo di generazione dei numeri pseudo-casuali. È stato migliorato il supporto per la generazione di flussi di oggetti casuali.
  • È stata implementata l'incapsulazione rigorosa obbligatoria di tutti gli elementi interni del JDK, ad eccezione delle API critiche, come sun.misc.Unsafe. L'incapsulazione rigorosa blocca le tentativi di accesso al codice delle classi interne, dei metodi e dei campi. In precedenza, la modalità di incapsulamento rigoroso poteva essere disattivata tramite l'opzione '—illegal-access=permit', ma ora è stata dichiarata obsoleta. Le applicazioni che necessitano di accesso a classi interne, metodi e campi devono definirli esplicitamente utilizzando l'opzione '—add-opens' o l'attributo Add-Opens nel file manifesto.
  • Le applicazioni possono definire filtri per la deserializzazione dei dati, che possono dipendere dal contesto e essere scelti dinamicamente in relazione a specifiche operazioni di deserializzazione. I filtri specificati si applicano a tutto macchina virtuale (a livello di JVM), cioè coprono non solo l'applicazione stessa, ma anche le librerie di terze parti utilizzate nell'applicazione.
  • In Swing è stato aggiunto il metodo javax.swing.filechooser.FileSystemView.getSystemIcon per il caricamento di icone di grandi dimensioni, il quale migliora la formattazione dell'interfaccia su schermi ad alta densità di pixel (HighDPI).
  • L'API java.net.DatagramSocket ha implementato il supporto per collegamenti a gruppi Multicast senza la necessità di utilizzare un'API separata java.net.MulticastSocket.
  • È stato migliorato lo strumento IGV (Ideal Graph Visualizer), che fornisce una visualizzazione interattiva della rappresentazione intermedia del codice nel compilatore JIT HotSpot VM C2.
  • Nella JavaDoc, analogamente al compilatore javac, quando viene riportato un errore ora viene specificato il numero della riga problematica nel file sorgente e la posizione dell'errore.
  • Aggiunta la proprietà native.encoding, che riflette il nome della codifica dei caratteri del sistema (UTF-8, koi8-r, cp1251, ecc.).
  • Aggiunta l'interfaccia java.time.InstantSource, che consente di gestire il tempo senza legarsi a un fuso orario.
  • Aggiunto l'API java.util.HexFormat per la conversione in rappresentazione esadecimale e viceversa.
  • Nel compilatore è stata aggiunta la modalità blackhole, che disabilita le operazioni di eccezione per il codice inutilizzato (eliminazione del codice morto), utile per i test delle prestazioni.
  • Nel Runtime è stata aggiunta l'opzione «-Xlog:async» per la registrazione dei log in modalità asincrona.
  • Per le connessioni protette, TLS 1.3 è ora attivato di default (precedentemente era TLS 1.2).
  • L'API Applet (java.applet.Applet*, javax.swing.JApplet), utilizzata per eseguire applicazioni Java nei browser, è stata riclassificata come deprecata (ha perso rilevanza dopo l'interruzione del supporto al plugin Java per i browser).
  • Il Security Manager, da tempo obsoleto e ormai non più richiesto dopo la cessazione del supporto per il plugin del browser, è stato classificato come deprecato.
  • Rimosso il meccanismo RMI Activation, obsoleto, che è stato trasformato in opzione già in Java 8 e applicato raramente nelle pratiche moderne.
  • Rimosso dal SDK il compilatore sperimentale che supportava JIT (just-in-time) per la compilazione dinamica del codice Java per HotSpot JVM, così come la modalità di compilazione anticipata (AOT, ahead-of-time) delle classi in codice macchina prima dell'avvio della macchina virtuale. Il compilatore, scritto in Java e basato sui risultati del progetto Graal, richiede notevoli sforzi di manutenzione che non giustificano più la sua esistenza vista la mancanza di richiesta da parte degli sviluppatori.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster