Versione di Java SE 17

Dopu sei mesi di sviluppu, Oracle hà liberatu Java SE 17 (Java Platform, Standard Edition 17), chì usa u prughjettu OpenJDK open-source cum'è implementazione di riferimentu. Cù l'eccezzioni di a rimozione di alcune funzioni obsolete, Java SE 17 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 17 (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 17 hè cumplettamente open source sottu a licenza GPLv2, cù l'eccezzioni GNU ClassPath chì permettenu ligami dinamichi cù i prudutti cummerciale.

Java SE 17 hè classificatu cum'è una versione di Supportu à Long Term (LTS), chì continuarà à riceve l'aghjurnamenti finu à u 2029. L'aghjurnamenti per a versione precedente di Java 16 milestone sò stati interrotti. U ramu LTS precedente di Java 11 serà supportatu finu à u 2026. A prossima versione LTS hè prevista per settembre 2024. 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 17 includenu:

  • Hè pruposta una implementazione sperimentale di currispundenza di mudelli in espressioni "switch", chì permette di utilizà micca valori esatti in etichette "casu", ma mudelli flessibili chì coprenu una seria di valori à una volta, per quale prima era necessariu aduprà ingombrante. catene di espressioni "se ... altru". Inoltre, "switch" hà a capacità di trattà i valori NULL. Ughjettu 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(); };
  • Supportu stabilizatu per e classi è interfacce sigillate, chì ùn ponu micca esse aduprate da altre classi è interfacce per eredite, estenderà o annullà l'implementazione. I classi sigillati furniscenu ancu un modu più dichjarazione per restringe l'usu di una superclasse cà i modificatori d'accessu, basatu nantu à una lista esplicita di e sottoclassi permessi per l'estensione. pacchettu com.example.geometry; Classe pubblica sigillata Permette di forma com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • Una seconda vista previa di l'API Vector hè pruposta, chì furnisce funzioni per i calculi vettoriali chì sò eseguiti cù struzzioni vettoriali nantu à i prucessori 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'auto-vectorizazione di l'operazioni scalari, a nova API permette di cuntrollà esplicitamente a vectorizazione per u prucessu di dati paralleli.
  • Aggiunta una vista previa di l'API di Funzione Straniera è Memoria, chì permette à l'applicazioni di interagisce cù codice è dati fora di u runtime Java. A nova API permette di chjamà in modu efficiente funzioni non-JVM è accede à a memoria non-JVM-managed. Per esempiu, pudete chjamà funzioni da biblioteche cumuni esterne è accede à e dati di prucessu senza aduprà JNI.
  • U mutore di rendering macOS chì alimenta l'API Java 2D, chì à u turnu alimenta l'API Swing, hè statu adattatu per utilizà l'API di grafica Metal. A piattaforma macOS cuntinueghja à aduprà OpenGL per difettu, è l'attivazione di u supportu di Metal richiede l'impostazione "-Dsun.java2d.metal=true" è almenu eseguisce macOS 10.14.x.
  • Aggiuntu un portu per a piattaforma macOS / AArch64 (urdinatori Apple basati nantu à i novi chips Apple M1). Una funzione speciale di u portu hè u supportu per u mecanismu di prutezzione di memoria W^X (Write XOR Execute), in quale e pagine di memoria ùn ponu micca accede simultaneamente per scrive è esecutà. (u codice pò esse eseguitu solu dopu chì a scrittura hè disattivata, è a scrittura in una pagina di memoria hè pussibule solu dopu chì l'esekzione hè disattivata).
  • Riturnatu à aduprà solu semantica strictfp per espressioni in virgule flottante. U supportu per a semantica "default", dispunibile da a liberazione di Java 1.2, hè stata interrotta, cumprese simplificazioni per travaglià in sistemi cù coprocessori matematichi x87 assai vechji (dopu à l'avventu di l'istruzzioni SSE2, a necessità di semantica supplementaria sparì).
  • I novi tipi di interfacce à i generatori di numeri pseudoaleatori sò stati implementati, è l'algoritmi supplementari sò stati implementati per una megliu generazione di numeri aleatorii. L'applicazioni sò datu l'uppurtunità di sceglie un algoritmu per generà numeri pseudoaleatoriu. Supportu migliuratu per a generazione di flussi di oggetti casuali.
  • L'incapsulamentu strettu infurzatu di tutti l'internu JDK, cù l'eccezzioni di l'API critichi cum'è sun.misc.Unsafe. L'incapsulazione stretta blocca i tentativi di codice per accede à classi, metudi è campi interni. Nanzu, u modu di incapsulazione strettu puderia esse disattivatu cù l'opzione "--illegal-access=permit", ma questu hè avà deprecated. L'applicazioni chì necessitanu accessu à e classi, i metudi è i campi interni anu da esse definite esplicitamente cù l'opzione --add-opens o l'attributu Add-Opens in u schedariu manifestu.
  • L'applicazioni sò datu l'abilità di definisce i filtri di deserializazione di dati, chì ponu esse sensibili à u cuntestu è dinamicamente selezziunati basatu annantu à operazioni di deserializazione specifiche. I filtri specificati sò applicabili à tutta a macchina virtuale (JVM-wide), i.e. copre micca solu l'applicazione stessa, ma ancu e biblioteche di terze parti utilizati in l'applicazione.
  • Swing hà aghjustatu u metudu javax.swing.filechooser.FileSystemView.getSystemIcon per carricà grandi icone per migliurà l'UI in schermi High DPI.
  • L'API java.net.DatagramSocket furnisce supportu per a cunnessione à i gruppi Multicast senza a necessità di una API java.net.MulticastSocket separata.
  • L'utilità IGV (Ideal Graph Visualizer) hè stata migliurata, chì furnisce una visualizazione interattiva di rapprisintazioni di codice intermediate in u compilatore HotSpot VM C2 JIT.
  • In JavaDoc, per analogia cù u compilatore javac, quandu un errore hè uscita, u numeru di a linea problematica in u schedariu fonte è u locu di l'errore sò avà indicati.
  • Aggiunta a pruprietà native.encoding, chì riflette u nome di a codificazione di caratteri di u sistema (UTF-8, koi8-r, cp1251, etc.).
  • L'interfaccia java.time.InstantSource hè stata aghjunta, chì permette a manipulazione di u tempu senza riferimentu à un fusu orariu.
  • Aghjunghje l'API java.util.HexFormat per a cunversione à a rapprisintazioni esadecimale è viceversa.
  • Un modu di blackhole hè statu aghjuntu à u compilatore, chì disattiveghja l'operazione di eliminazione di codice mortu, chì pò esse usatu quandu si facenu teste di rendiment.
  • Aggiunta l'opzione "-Xlog: async" à Runtime per registrà logs in modu asincronu.
  • Quandu stabiliscenu cunnessione sicure, TLS 1.3 hè attivatu per difettu (precedentemente TLS 1.2 hè stata utilizata).
  • L'Applet API obsoleta (java.applet.Applet*, javax.swing.JApplet) dichjarata prima, chì hè stata aduprata per eseguisce l'applicazioni Java in u navigatore, hè stata spustata à a categuria di slated per a rimozione (pertinenza persa dopu a fine di supportu). per u plugin Java per i navigatori).
  • U Manager di Sicurezza, chì hà longu persu a so rilevanza è ùn hè micca riclamatu dopu à a fine di u supportu per u plugin di u navigatore, hè statu spustatu à a categuria di quelli chì sò previsti per a rimuzione.
  • U mecanismu di attivazione RMI hè statu sguassatu, chì hè anticu, relegatu à a categuria di una opzione in Java 8 è ùn hè quasi mai usatu in a pratica muderna.
  • Un compilatore sperimentale chì supporta JIT (just-in-time) per a compilazione dinamica di codice Java per HotSpot JVM, è ancu u modu di compilazione anticipata (AOT, prima di u tempu) di classi in codice macchina prima di inizià a macchina virtuale. , hè stata eliminata da u SDK. U compilatore hè statu scrittu in Java è basatu annantu à u travagliu di u prughjettu Graal. Hè nutatu chì u mantenimentu di u compilatore richiede assai travagliu, chì ùn hè micca ghjustificatu quandu ùn ci hè micca dumanda da i sviluppatori.

Source: opennet.ru

Add a comment