Uscita di Java SE 16

Dopo sei mesi di sviluppo, Oracle ha rilasciato la piattaforma Java SE 16 (Java Platform, Standard Edition 16), di cui utilizza come implementazione di riferimento il progetto open source OpenJDK. In Java SE 16 è mantenuta la compatibilità retroattiva con le versioni precedenti della piattaforma Java; tutti i progetti Java scritti in precedenza funzioneranno senza modifiche quando eseguiti con la nuova versione. Le versioni pronte per l'installazione di Java SE 16 (JDK, JRE e Server JRE) sono disponibili per Linux (x86_64, AArch64), Windows e macOS. L'implementazione di riferimento di Java 16, sviluppata nell'ambito del progetto OpenJDK, è completamente open source sotto licenza GPLv2 con eccezioni GNU ClassPath, che consentono il collegamento dinamico con prodotti commerciali.

Java SE 16 è classificato tra le versioni con supporto standard, con aggiornamenti che verranno rilasciati fino al successivo rilascio. Per una versione con supporto a lungo termine (LTS), si consiglia di utilizzare Java SE 11, con aggiornamenti previsti fino al 2026. Il prossimo rilascio LTS è previsto per settembre 2021. Ricordiamo che a partire dal rilascio di Java 10, il progetto ha adottato un nuovo processo di sviluppo, caratterizzato da un ciclo di rilascio più breve. La nuova funzionalità viene ora sviluppata in un master branch aggiornato regolarmente, nel quale vengono inclusi i cambiamenti già pronti e dal quale si diramano ogni sei mesi rami per la stabilizzazione delle nuove versioni.

Nella preparazione della nuova versione, lo sviluppo è stato trasferito dal sistema di gestione delle versioni Mercurial a Git e alla piattaforma di collaborazione GitHub. Ci si aspetta che la migrazione migliori le prestazioni delle operazioni con il repository, aumenti l'efficienza dell'archiviazione, garantisca l'accesso alle modifiche in tutta la storia del progetto, migliori il supporto alla revisione del codice e utilizzi le API per automatizzare i flussi di lavoro. Inoltre, l'uso di Git e GitHub rende il progetto più attraente per i principianti e per gli sviluppatori abituali di Git.

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

  • Aggiunto il modulo sperimentale jdk.incubator.vector con l'implementazione dell'API Vector, che offre funzioni per calcoli vettoriali eseguiti utilizzando le istruzioni vettoriali dei processori x86_64 e AArch64, consentendo di applicare operazioni simultaneamente a più valori (SIMD). A differenza delle capacità di auto-vettorializzazione delle operazioni scalari fornite dal compilatore JIT HotSpot, la nuova API consente di gestire esplicitamente la vettorializzazione per l'elaborazione parallela dei dati.
  • Nel codice JDK e VM HotSpot, scritto in C++, è permesso utilizzare le funzionalità introdotte dalla specifica C++14. In precedenza era consentito utilizzare gli standard C++98/03.
  • Nel garbage collector ZGC (Z Garbage Collector), operante in modalità passiva e che minimizza al massimo le latenze dovute alla raccolta dei rifiuti, è stata aggiunta la possibilità di elaborazione parallela degli stack dei thread senza sospendere l'esecuzione dei thread dell'applicazione. In ZGC rimangono ora solo le operazioni che richiedono una sospensione, che hanno ritardi costanti, solitamente non superiori a poche centinaia di microsecondi.
  • Nelle classi SocketChannel, ServerSocketChannel e java.nio.channels è stata aggiunta la supporto per i socket Unix (AF_UNIX).
  • Realizzato un porting per la distribuzione Linux Alpine con la libreria C standard musl, popolare in ambienti per container, microservizi, cloud e sistemi embedded. Il porting proposto in tali ambienti consente di eseguire programmi Java come normali applicazioni. Inoltre, utilizzando jlink si possono rimuovere tutti i moduli non utilizzati e creare un ambiente minimo sufficiente per eseguire l'applicazione, permettendo di generare immagini compatte specifiche per applicazioni.
  • È stato implementato il meccanismo Elastic Metaspace, che ottimizza le operazioni di allocazione e restituzione della memoria occupata dai metadati delle classi (metaspace) nella JVM HotSpot. L'uso di Elastic Metaspace riduce la frammentazione della memoria, diminuisce l'overhead nel caricatore di classi e ha un impatto positivo sulle prestazioni delle applicazioni server a lungo termine grazie a un più rapido ritorno della memoria occupata dai metadati delle classi non utilizzati al sistema operativo. Per selezionare la modalità di recupero della memoria dopo lo scaricamento delle classi è stata proposta l'opzione «-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)».
  • Aggiunto il port JDK per sistemi Windows che operano su hardware con processori basati sull'architettura AArch64.
  • Proposto un terzo tentativo preliminare dell'API Foreign-Memory Access, che consente alle applicazioni Java di accedere in modo sicuro ed efficiente alle aree di memoria al di fuori dell'heap Java, manipolando le nuove astrazioni MemorySegment, MemoryAddress e MemoryLayout.
  • Implementato un API sperimentale Foreign Linker, che offre accesso da Java a codice nativo. Insieme all'API Foreign-Memory, la nuova interfaccia semplifica notevolmente la creazione di wrapper per comuni librerie condivise.
  • Aggiunto lo strumento jpackage, che consente di creare pacchetti per applicazioni Java autonome. Lo strumento si basa su javapackager di JavaFX e permette di generare pacchetti in formati nativi per diverse piattaforme (msi ed exe per Windows, pkg e dmg per macOS, deb e rpm per Linux). I pacchetti includono tutte le dipendenze necessarie.
  • È stata abilitata per impostazione predefinita una rigorosa incapsulazione di tutti gli elementi interni del JDK, ad eccezione delle API critiche, come sun.misc.Unsafe. Il valore dell'opzione «—illegal-access» è ora impostato su «deny» per impostazione predefinita anziché «permit», il che porterà al blocco dei tentativi di accesso ai più interni classi, metodi e campi dal codice. Per aggirare la restrizione è necessario utilizzare l'opzione «—illegal-access=permit».
  • È stata stabilizzata l'implementazione del pattern matching nell'operatore «instanceof», che consente di definire immediatamente una variabile locale per accedere al valore verificato. Ad esempio, ora è possibile scrivere immediatamente «if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}» senza una definizione esplicita di «String s = (String) obj». Prima: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Ora è possibile fare a meno della definizione «Group group = (Group) obj»: if (obj instanceof Group group) { var entries = group.getEntries(); }
  • È stata stabilizzata l'implementazione della parola chiave «record», che fornisce una forma compatta per la definizione delle classi, consentendo di evitare la definizione esplicita di vari metodi a basso livello, come equals(), hashCode() e toString(), quando i dati sono conservati solo nei campi, il cui comportamento non cambia. Quando in una classe vengono utilizzate implementazioni standard dei metodi equals(), hashCode() e toString(), è possibile fare a meno della loro definizione esplicita: public record BankTransaction(LocalDate date, double amount, String description) {}

    Questa dichiarazione porterà all'aggiunta automatica delle implementazioni dei metodi equals(), hashCode() e toString() oltre al costruttore e ai metodi che controllano la modifica dei dati (getter).

  • È stata proposta una seconda versione preliminare di classi e interfacce sigillate («sealed»), che non possono essere utilizzate da altre classi e interfacce per l'ereditarietà, l'estensione o la ridefinizione dell'implementazione. Le classi sigillate forniscono anche un modo più dichiarativo per limitare l'uso della superclasse rispetto ai modificatori di accesso, basato su un elenco esplicito dei sottoclassi autorizzate all'estensione. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {...}

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