Versione di Java SE 15

Dopu à sei mesi di sviluppu, Oracle liberatu piattaforma JavaSE 15 (Java Platform, Standard Edition 15), u prughjettu open-source OpenJDK hè utilizatu cum'è implementazione di riferimentu. Java SE 15 mantene a cumpatibilità retrocede cù e versioni precedenti di a piattaforma Java tutti i prughjetti Java scritti prima funzionanu senza cambiamenti quandu eseguite sottu a nova versione. Build Java SE 15 pronte per l'installazione (JDK, JRE è Server JRE) preparatu per Linux (x86_64), Windows è macOS. Implementazione di riferimentu sviluppata da u prughjettu OpenJDK Java 15 hè cumplettamente open source sottu a licenza GPLv2, cù eccezzioni GNU ClassPath chì permettenu ligami dinamichi cù i prudutti cummerciale.

Java SE 15 hè classificatu cum'è una versione di supportu generale è continuarà à riceve l'aghjurnamenti finu à a prossima versione. A filiera di Support Long Term (LTS) deve esse Java SE 11, chì continuarà à riceve l'aghjurnamenti finu à u 2026. U ramu LTS precedente di Java 8 serà supportatu finu à dicembre 2020. A prossima versione LTS hè prevista per settembre 2021. 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.

Da innovazioni Java 15 Marque:

  • Custruitu supportu per l'algoritmu di creazione di firma digitale EdDSA (Edwards-Curve Digital Signature Algorithm) RFC 8032). L'implementazione EdDSA pruposta ùn dipende micca di e plataforme hardware, hè prutetta da attacchi di u canali laterali (u tempu constante di tutti i calculi hè assicuratu) è hè più veloce in u rendiment chì l'implementazione ECDSA esistente scritta in lingua C, cù u listessu livellu di prutezzione. Per esempiu, EdDSA utilizendu una curva ellittica cù una chjave 126-bit presenta prestazioni simili à ECDSA cù una curva ellittica secp256r1 è una chjave 128-bit.
  • Aggiuntu supportu sperimentale per classi è interfacce sigillati, chì ùn ponu micca esse aduprati da altre classi è interfacce per eredite, allargà 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 sigillata publica Forma
    permette com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.simple.Square {…}

  • Aggiuntu supportu per classi nascosti chì ùn ponu micca esse utilizati direttamente da u bytecode di altre classi. U scopu chjave di e classi nascoste hè di esse aduprate in frameworks chì generanu dinamicamente classi in runtime è l'utilizanu indirettamente, attraversu riflessa. Tali classi sò generalmente un ciculu di vita limitatu, cusì u mantenimentu per l'accessu da e classi generati staticamente ùn hè micca ghjustificatu è porta solu à un cunsumu di memoria aumentatu. I classi hidden eliminanu ancu a necessità di l'API non standard sun.misc.Unsafe::defineAnonymousClass, chì hè prevista per a rimozione in u futuru.
  • U cullettore di basura ZGC (Z Garbage Collector) hè statu stabilizatu è hè ricunnisciutu com'è prontu per l'usu generalizatu. ZGC opera in modu passiu, minimizza a latenza per a cullizzioni di basura quant'è pussibule (u tempu di stallazione quandu l'utilizazione di ZGC ùn supera micca 10 ms.) È pò travaglià cù picculi è enormi, chì varieghja in grandezza da parechji centu megabyte à parechji terabytes.
  • Stabilizatu è trovu prontu per l'usu generale
    cullettore di basura Shenandoah, travagliendu cù pause minime (Low-Pause-Time Garbage Collector). Shenandoah hè statu sviluppatu da Red Hat è hè notu per u so usu di un algoritmu chì riduce u tempu di stallazione durante a cullizzioni di a basura eseguendu a pulizia in parallelu cù l'esekzione di l'applicazioni Java. A dimensione di i ritardi introduttu da u cullettore di basura hè prevedibile è ùn dipende micca da a dimensione di u munzeddu, i.e. per cumuli di 200 MB è 200 GB i ritardi seranu identici (ùn esce micca oltre 50 ms è generalmente in 10 ms);

  • U sustegnu hè statu stabilizatu è introduttu in a lingua blocchi di testu - una nova forma di letterali di stringa chì vi permette di includere dati di testu multi-linea in u codice fonte senza usà a scappata di caratteri è priservà u furmatu di testu originale in u bloccu. U bloccu hè inquadratu da trè virgulette doppie.

    Per esempiu, invece di codice

    String html = " » +
    "\n\t" + " » +
    "\n\t\t" + " "Java 1 hè quì!" » +
    "\n\t" + " » +
    "\n" + " ";

    pudete specificà:

    String html = """


    »Java 1\
    hè quì!

    """;

  • Riprogettatu Legacy DatagramSocket API. I vechji implementazioni di java.net.DatagramSocket è java.net.MulticastSocket sò stati rimpiazzati cù una implementazione muderna chì hè più faciule da debug è mantene, è hè ancu cumpatibile cù i flussi virtuali sviluppati in u prugettu. Loom. In casu di pussibuli incompatibilità cù u codice esistente, a vechja implementazione ùn hè micca stata eliminata è pò esse attivata cù l'opzione jdk.net.usePlainDatagramSocketImpl.
  • Seconda implementazione sperimentale pruposta currispundenza di mudellu in l'operatore "instanceof", chì permette di definisce immediatamente una variabile locale per accede à u valore verificatu. Per esempiu, pudete scrive immediatamente "se (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" senza definisce esplicitamente "String s = (String) obj".

    Era:

    if (obj instanceof Group) {
    Group group = (Gruppu) obj;
    var entries = group.getEntries();
    }

    Avà pudete fà senza a definizione "Group group = (Group) obj":

    if (obj instanceof Group Group) {
    var entries = group.getEntries();
    }

  • Pruposta seconda implementazione sperimentale di a chjave "discugràfica", chì furnisce una forma compacta per definisce e classi, chì permette di evità di definisce esplicitamente diversi metudi di livellu bassu cum'è equals (), hashCode () è toString () in i casi induve i dati sò almacenati solu in campi chì u cumpurtamentu ùn cambia micca. Quandu una classa usa implementazioni standard di i metudi equals(), hashCode() è toString(), pò fà senza a so definizione esplicita:

    registru publicu BankTransaction (data LocalDate,
    quantità doppia
    String description) {}

    Questa dichjarazione aghjunghje automaticamente implementazioni di i metudi equals(), hashCode() è toString() in più di i metudi di custruttore è getter.

  • Pruposta una seconda vista previa di l'API d'Access à a Memoria Estera, chì permette à l'applicazioni Java di accede in modu sicuru è efficiente à e regioni di memoria fora di l'heap Java manipulendu e novi astrazioni MemorySegment, MemoryAddress è MemoryLayout.
  • Disabilitatu è deprecated the Biased Locking ottimisazione tecnica aduprata in a JVM HotSpot per riduce u overhead di bloccu. Sta tecnica hà persu a so rilevanza nantu à i sistemi cù struzzioni atomichi furnite da CPU muderni, è hè troppu laboriosa per mantene per via di a so cumplessità.
  • Annunziata mecanismu obsoleto Attivazione RMI, chì serà eliminatu in una futura versione. Hè nutatu chì l'attivazione RMI hè obsoleta, relegata à a categuria di una opzione in Java 8 è ùn hè quasi mai usata in a pratica muderna.
  • Sguassatu mutore JavaScript Nashorn, chì era obsoletu in Java SE 11.
  • Sguassatu porti per i processori Solaris OS è SPARC (Solaris/SPARC, Solaris/x64 è Linux/SPARC). L'eliminazione di questi porti permetterà à a cumunità di accelerà u sviluppu di e novi funzioni OpenJDK senza perde u tempu à mantene e funzioni specifiche di Solaris è SPARC.

Source: opennet.ru

Add a comment