Uscita di Java SE 20

Dopo sei mesi di sviluppo, Oracle ha rilasciato la piattaforma Java SE 20 (Java Platform, Standard Edition 20), la cui implementazione di riferimento utilizza il progetto open source OpenJDK. A parte la rimozione di alcune funzionalità obsolete, Java SE 20 mantiene la compatibilità retroattiva con le versioni precedenti della piattaforma Java: la maggior parte dei progetti Java precedentemente scritti funzionerà senza modifiche sulla nuova versione. Sono disponibili build pronte per l'installazione di Java SE 20 (JDK, JRE e Server JRE) per Linux (x86_64, AArch64), Windows (x86_64) e macOS (x86_64, AArch64). L'implementazione di riferimento di Java 20, sviluppata nell'ambito del progetto OpenJDK, è completamente aperta sotto la licenza GPLv2 con eccezioni GNU ClassPath, che consentono il collegamento dinamico con prodotti commerciali.

Java SE 20 è classificato come una release con supporto standard, con aggiornamenti rilasciati fino alla successiva versione. Per un ramo con supporto a lungo termine (LTS) si consiglia di utilizzare Java SE 17, con aggiornamenti rilasciati fino al 2029. Ricordiamo che a partire dalla release Java 10, il progetto ha adottato un nuovo processo di sviluppo, caratterizzato da cicli di rilascio più brevi. Le nuove funzionalità vengono ora sviluppate all'interno di un ramo master continuamente aggiornato, che include modifiche già pronte e da cui vengono ramificate le versioni di stabilizzazione ogni sei mesi.

Tra le novità di Java 20 si segnala:

  • È stata proposta una preliminare supporto per i valori limitati (Scoped Values), che consentono di condividere dati immutabili tra i thread e di scambiare efficientemente informazioni tra i thread figli (i valori vengono ereditati). I Scoped Values si sviluppano come una sostituzione per le variabili locali al thread (thread-local variables) e sono più efficienti nell'uso di un numero molto elevato di thread virtuali (migliaia e milioni di thread). La principale differenza tra i Scoped Values e le variabili locali al thread è che i primi vengono scritti una sola volta, non possono più essere modificati e rimangono accessibili solo durante l'esecuzione del thread. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve(Request request, Response response) { var level = (request.isAuthorized() ? ADMIN : GUEST); var user = new User(level); ScopedValue.where(CURRENT_USER, user).run(() -> Application.handle(request, response)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) throw new InvalidUserException(); return new DBConnection(…); } }
  • È stata aggiunta la seconda implementazione preliminare delle pattern record, che estende la funzionalità di pattern matching introdotta in Java 16 per l'analisi dei valori delle classi di tipo record. Ad esempio: record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = p.x(); int y = p.y(); System.out.println(x + y); } }
  • È stata aggiunta la quarta implementazione preliminare del pattern matching nelle espressioni 'switch', che consente di utilizzare non solo valori esatti ma anche pattern flessibili nei case, coprendo immediatamente una serie di valori per i quali in precedenza era necessario utilizzare catene esplicite di 'if...else'. static String formatterPatternSwitch(Object obj) { return switch (obj) { 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 -> obj.toString(); }; }
  • È stata aggiunta la seconda implementazione preliminare dell'API FFM (Foreign Function & Memory), che consente di organizzare l'interazione tra le applicazioni Java e il codice e i dati esterni tramite la chiamata di funzioni da librerie esterne e l'accesso alla memoria al di fuori della JVM.
  • È stata aggiunta la seconda implementazione preliminare dei thread virtuali, che sono thread leggeri, rendendo significativamente più semplice la scrittura e la manutenzione di applicazioni multi-thread ad alte prestazioni.
  • È stata aggiunta la seconda versione dell'API sperimentale per il parallelismo strutturato, che semplifica lo sviluppo delle applicazioni multi-thread trattando più compiti eseguiti in thread diversi come un'unica unità.
  • È stata aggiunta la quinta implementazione preliminare dell'API Vector, che fornisce funzioni per i calcoli vettoriali che vengono eseguiti utilizzando le istruzioni vettoriali dei processori x86_64 e AArch64 e consentono di applicare operazioni a più valori contemporaneamente (SIMD). A differenza di quanto fornito dalle funzionalità di auto-vettorizzazione delle operazioni scalari nel compilatore JIT HotSpot, la nuova API offre la possibilità di gestire esplicitamente la vettorizzazione per l'elaborazione parallela dei dati.

Fonte: opennet.ru

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