Liberazione di a piattaforma Java SE 22 è l'implementazione di riferimentu apertu OpenJDK 22

Dopu sei mesi di sviluppu, Oracle hà liberatu Java SE 22 (Java Platform, Standard Edition 22), chì usa u prughjettu OpenJDK open-source cum'è implementazione di riferimentu. Cù l'eccezzioni di a rimozione di alcune funzioni obsolete, Java SE 22 mantene a cumpatibilità retrocede cù versioni precedenti di a piattaforma Java - a maiò parte di i prughjetti Java scritti prima funzionaranu senza cambiamenti quandu eseguite sottu a nova versione. I build pronti per l'installazione di Java SE 22 (JDK, JRE è Server JRE) sò pronti per Linux (x86_64, AArch64), Windows (x86_64) è macOS (x86_64, AArch64). Sviluppatu da u prughjettu OpenJDK, l'implementazione di riferimentu Java 22 hè cumplettamente open source sottu a licenza GPLv2, cù l'eccezzioni GNU ClassPath chì permettenu ligami dinamichi cù i prudutti cummerciale.

Java SE 22 hè classificatu cum'è una versione di supportu regulare è continuerà à riceve l'aghjurnamenti finu à a prossima versione. A filiera di Support Long Term (LTS) deve esse Java SE 21 o Java SE 17, chì riceverà l'aghjurnamenti finu à u 2031 è u 2029, rispettivamente (disponibili in generale finu à u 2028 è u 2026). U supportu publicu per a filiera LTS di Java SE 11 hè finitu u settembre scorsu, ma u supportu allargatu continuerà finu à u 2032. U supportu allargatu per a branche LTS di Java SE 8 continuerà finu à u 2030.

Ricurdemu chì, cuminciendu cù a liberazione di Java 10, u prugettu hà cambiatu à un novu prucessu di sviluppu, chì implica un ciculu più curtu per a furmazione di novi versioni. A nova funziunalità hè issa sviluppata in un ramu maestru constantemente aghjurnatu, chì include cambiamenti pronti è da quali rami sò ramificati ogni sei mesi per stabilizzà e novi versioni.

I novi funziunalità in Java 22 includenu:

  • U cullettivu di basura G1 include supportu per u pinning di a regione, chì vi permette di riparà temporaneamente u locu di l'uggetti Java in memoria per evità di esse spustati da u cullettore di basura è per permette chì e riferimenti à questi ogetti passanu in modu sicuru trà Java è codice nativu. Pinning permette di riduce a latenza è evità di disattivà a cullizzioni di basura durante l'esecuzione di regioni critiche di JNI (Java Native Interface) cù codice nativu (mentre esegue queste sezioni, a JVM ùn deve micca move l'uggetti critichi assuciati cù elli per evità e cundizioni di razza). Pinning sguassate l'uggetti critichi da a vista di u cullettore di basura, chì ponu cuntinuà à pulizziari i spazii senza pinnà.
  • Una funzione prelimiunale hè stata aghjunta per permettà l'espressioni per esse specificate in i custruttori prima di chjamà super (...), utilizatu per chjamà esplicitamente un constructore di classi parenti da un custruttore di classi ereditatu se queste espressioni ùn si riferite micca à una istanza creata da u custruttore. class Outer { void hello () { System.out.println ("Hello"); } class Inner { Inner () { salutu (); super(); } } }
  • L'API FFM (Foreign Function & Memory) hè stata stabilizzata, chì permette l'interazzione di i prugrammi Java cù u codice esternu è e dati chjamendu funzioni da biblioteche esterne è accede à a memoria fora di a JVM, senza ricorrere à l'usu di JNI (Java Native Interface).
  • U supportu per e variabili senza nome è a cuncordanza di mudelli hè stata attivata - invece di variabili è mudelli inutilizati ma necessarii quandu chjamate, pudete avà specificà u caratteru "_". // era String pageName = cambia (pagina) { case GitHubIssuePage (var url, var content, var links, int issueNumber) -> "ISSUE #" + issueNumber; ...}; // avà pudete String pageName = cambià (pagina) { case GitHubIssuePage (_, _, _, int issueNumber) -> "ISSUE #" + issueNumber; };
  • Una implementazione preliminare di l'API Class-File hè pruposta per analizà, generà è cunvertisce i schedarii di classi Java. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce: classModel) { if (!(ce instance of MethodModel mm && mm.methodName().stringValue(). startsWith ("debug")) { classBuilder.with (ce); } } });
  • L'utilità java furnisce l'abilità di eseguisce prugrammi Java, furniti in forma di parechji schedarii di codice o biblioteche di classi precompilate, senza cumpilà separatamente questi schedari è senza cunfigurà u sistema di creazione. A nova funzione facilita l'esecuzione di prugrammi in quale u codice di e diverse classi hè spartutu in schedarii separati. Prog.java: class Prog { public static void main(String[] args) { Helper.run (); } } Helper.java: class Helper { static void run () { System.out.println ("Hello!"); } }

    Per esempiu, per eseguisce un prugramma custituitu di dui schedari "Prog.java" è "Helper.java" hè avà abbastanza per eseguisce "java Prog.java", chì compilerà a classa Prog, definisce una riferenza à a classa Helper, truvà è compilà u schedariu Helper.java è chjamà u metudu principale.

  • Aggiunta una seconda implementazione preliminare di String Templates, implementata in più di i letterali di stringa è i blocchi di testu. I mudelli di stringa permettenu di cumminà u testu cù espressioni calculate è variabili senza aduprà l'operatore +. A sustituzione di l'espressioni hè realizata usendu sustituzzioni \{..}, è i manigliatori speciali ponu esse cunnessi per verificà a correttezza di i valori sustituiti. Per esempiu, u processatore SQL verifica i valori chì sò sustituiti in u codice SQL è torna un ughjettu java.sql.Statement cum'è output, mentre chì u processatore JSON monitoreghja a correttezza di e sustituzzioni JSON è torna un JsonNode. String query = "SELECT * FROM Persona p WHERE p." + pruprietà + " = '" + valore + "'"; // was Statement query = SQL."""SELECT * FROM Person p WHERE p.\{propiety} = '\{value}'"""; // divintò
  • Una settima vista previa di l'API Vector hè stata aghjunta, chì furnisce e funzioni per i calculi vettoriali chì sò realizati cù struzzioni vettoriali nantu à i processori x86_64 è AArch64 è permettenu l'operazioni per esse applicate simultaneamente à parechji valori (SIMD). A cuntrariu di e capacità furnite in u compilatore HotSpot JIT per l'autovectorizazione di l'operazioni scalari, a nova API permette di cuntrollà esplicitamente a vectorizazione per u processu di dati paralleli.
  • Una implementazione preliminare di l'API Stream estesa hè stata aghjunta chì sustene a definizione di e vostre propiu operazioni intermedie, chì ponu esse utili in i casi induve l'operazioni intermedie integrate esistenti ùn sò micca abbastanza per a trasfurmazione di dati desiderata. I gestori nativi sò cunnessi utilizendu a nova operazione intermediaria Stream::gather(Gatherer), chì processa elementi di flussu appiendu un gestore specificatu da l'utilizatori. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • Una seconda versione di l'API sperimentale per Structured Concurrency hè stata pruposta per a prova, chì simplificà u sviluppu di l'applicazioni multi-threaded processendu parechje attività eseguite in diversi fili cum'è un bloccu unicu.
  • Aggiunta una seconda implementazione preliminare di classi implicitamente dichjarate è istanze senza nome di u metudu "principale", chì pò dispenser di dichjarazioni publiche / statiche, passendu una serie di argumenti, è altre entità assuciate cù una dichjarazione di classi. // era public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // avà pudete void main () { System.out.println ("Hello, World!"); }
  • Aggiunta una seconda implementazione di anteprima di Scoped Values, chì permette à e dati immutabili di esse spartuti trà i fili è i dati scambiati in modu efficiente trà i fili di i zitelli (i valori sò ereditati). I Valori Scoped sò sviluppati per rimpiazzà u mecanismu di variabili lucali di filu è sò più efficaci quandu utilizanu un gran numaru di fili virtuali (millaie o milioni di fili). A principal diferenza trà i Valori Scoped è e variabili lucali di filu hè chì i primi sò scritti una volta, ùn ponu esse cambiati in u futuru, è restanu dispunibili solu per a durata di l'esekzione di u filu.
  • U cullettore di basura Parallel hà migliuratu u rendiment quandu si travaglia cù grandi matrici di oggetti. L'ottimisazione hà permessu in certi testi cù grande array d'uggetti per riduce u ritardu prima di cumincià à circà un ughjettu da 20%.

Inoltre, pudete nutà a publicazione di un aghjurnamentu à a piattaforma per creà applicazioni cù una interfaccia grafica JavaFX 22.

Source: opennet.ru

Add a comment