Uscita di Java SE 14

Dopo sei mesi di sviluppo, l'azienda Oracle ha rilasciato piattaforma Java SE 14 (Java Platform, Standard Edition 14), la cui implementazione di riferimento è fornita dal progetto open source OpenJDK. In Java SE 14 è mantenuta la retrocompatibilità con le versioni precedenti della piattaforma Java, tutti i progetti Java precedentemente scritti funzioneranno senza modifiche sotto la nuova versione. Le build pronte per l'installazione di Java SE 14 (JDK, JRE e Server JRE) sono stati preparati per Linux (x86_64), Windows e macOS. L'implementazione di riferimento sviluppata nell'ambito del progetto OpenJDK Java 14 è completamente aperta sotto licenza GPLv2 con eccezioni GNU ClassPath, che consentono il binding dinamico con prodotti commerciali.

Java SE 14 è classificato come una versione con ciclo di vita normale, gli aggiornamenti verranno rilasciati fino alla prossima release. Come filone LTS (supporto a lungo termine) si consiglia di utilizzare Java SE 11, gli aggiornamenti per cui verranno rilasciati fino al 2026. Il precedente filone LTS Java 8 sarà supportato fino a dicembre 2020. La prossima release LTS è prevista per settembre 2021. Ricordiamo che a partire dalla release Java 10, il progetto è passato a un nuovo processo di sviluppo, che prevede cicli di rilascio più brevi. Le nuove funzionalità vengono ora sviluppate in un unico branch master, che viene aggiornato continuamente e da cui si diramano branch di stabilizzazione per nuove versioni ogni sei mesi.

Da novità Java 14 è possibile segnalare:

  • È stato aggiunto il supporto sperimentale corrispondenza con il modello nell'operatore «instanceof», che consente di definire immediatamente una variabile locale per accedere al valore verificato. Ad esempio, si può scrivere direttamente «if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}» senza definire esplicitamente «String s = (String) obj».

    Era:

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

    Ora è possibile omettere la definizione «Group group = (Group) obj»:

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

  • È stato aggiunto il supporto sperimentale per la nuova parola chiave «record», che fornisce una forma compatta per definire classi, consentendo di evitare la definizione esplicita di vari metodi a basso livello, come equals(), hashCode() e toString(), nei casi in cui i dati vengono memorizzati solo nei campi, il cui comportamento non cambia. Quando in una classe vengono utilizzate implementazioni predefinite dei metodi equals(), hashCode() e toString(), è possibile evitare la loro definizione esplicita:

    record pubblico BankTransaction(LocalDate data,
    double importo,
    String descrizione) {}

    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).

  • Standardizzato ed è inclusa per impostazione predefinita la supporto per la nuova forma di espressioni «switch», che non richiede l'indicazione dell'operatore «break», consentendo di unire etichette ripetute e ammettendo l'uso non solo come operatore, ma anche come espressione.

    var log = switch (evento) {
    case PLAY -> «L'utente ha attivato il pulsante di riproduzione»;
    case STOP, PAUSE -> «L'utente ha bisogno di una pausa»;
    default -> {
    String messaggio = evento.toString();
    LocalDateTime adesso = LocalDateTime.now();
    yield «Evento sconosciuto» + messaggio +
    » registrato il » + adesso;
    }
    };

  • Espansa la supporto sperimentale per blocchi di testo — una nuova forma di letterali stringa che consente di includere nel codice sorgente dati testuali multi-linea senza bisogno di escaping dei caratteri e mantenendo il formato originale del testo nel blocco. L'incapsulamento del blocco è fatto con tre virgolette doppie. In Java 14, nei blocchi di testo è implementato il supporto per la sequenza di escape «\s» per definire uno spazio e «\» per concatenare con la riga successiva (ignorando il ritorno a capo quando si è costretti a generare una stringa molto lunga). Ad esempio, invece del codice

    String html = «<HTML>» +
    «\n\t» + «<BODY>» +
    «\n\t\t» + «<H1>\»Java 14 è qui!\»<\/H1>» +
    «\n\t» + «<\/BODY>» +
    «\n» + «<\/HTML>»;

    si può specificare:

    String html = «»»
    <HTML>
    <BODY>
    <H1>»Java 14\
    è arrivato!»<\/H1>
    <\/BODY>
    <\/HTML>»»»;

  • Espansa l'informatività della diagnostica in caso di eccezioni NullPointerException. Se prima il messaggio di errore rimandava solo al numero di riga, ora dettaglia quale metodo ha causato l'eccezione. La diagnostica espansa si attiva al momento della esecuzione con il flag «-XX:+ShowCodeDetailsInExceptionMessages». Ad esempio, specificando questo flag, l'eccezione nella riga

    var name = user.getLocation().getCity().getName();

    porterà alla visualizzazione del messaggio

    Eccezione nel thread «main» java.lang.NullPointerException: Impossibile invocare «Location.getCity()»
    perché il valore di ritorno di «User.getLocation()» è nullo
    in NullPointerExample.main(NullPointerExample.java:5):5)

    che permette di capire che il metodo Location.getCity() non è stato invocato, ma User.getLocation() ha restituito un valore nullo.

  • Realizzato una versione preliminare dell'utility jpackage, che permette di creare pacchetti per applicazioni Java autonome (self-contained). L'utility si basa su javapackager di JavaFX e consente di formare pacchetti in formati nativi per diverse piattaforme (msi e exe per Windows, pkg e dmg per macOS, deb e rpm per Linux). I pacchetti includono tutte le dipendenze necessarie.
  • Nella raccolta di rifiuti G1 è stata aggiunta nuovo meccanismo di distribuzione della memoria, tenendo conto delle specificità del lavoro su grandi sistemi che utilizzano l'architettura NUMA. Il nuovo distributore di memoria viene attivato tramite il flag «+XX:+UseNUMA» e consente di migliorare significativamente le prestazioni sui sistemi NUMA.
  • Aggiunto API per monitorare in tempo reale gli eventi JFR (JDK Flight Recorder), ad esempio per organizzare un monitoraggio continuo.
  • Aggiunto modulo jdk.nio.mapmode, che offre nuove modalità (READ_ONLY_SYNC, WRITE_ONLY_SYNC) per creare buffer di byte mappati (MappedByteBuffer) che fanno riferimento alla memoria non volatile (NVM).
  • Realizzato bozza dell'API Foreign-Memory Access, che consente alle applicazioni Java di accedere in modo sicuro ed efficiente alle aree di memoria al di fuori della heap Java, manipolando nuove astrazioni come MemorySegment, MemoryAddress e MemoryLayout.
  • Dichiarati obsoleti i port per il sistema operativo Solaris e per i processori SPARC (Solaris/SPARC, Solaris/x64 e Linux/SPARC) con l'intento di rimuovere questi port in futuro. La classificazione di questi port come obsoleti permetterà alla comunità di accelerare lo sviluppo di nuove funzionalità di OpenJDK, senza sprecare tempo nel mantenere caratteristiche specifiche per Solaris e SPARC.
  • Rimosso il garbage collector CMS (Concurrent Mark Sweep), che due anni fa era stato dichiarato obsoleto e non è più supportato (da tempo CMS è stato sostituito dal garbage collector G1). Inoltre, annunciato risultato obsoleto l'uso della combinazione di algoritmi di garbage collection ParallelScavenge e SerialOld (esecuzione con le opzioni «-XX:+UseParallelGC -XX:-UseParallelOldGC»).
  • È fornito supporto sperimentale per il garbage collector ZGC (Z Garbage Collector) sulle piattaforme macOS e Windows (in precedenza supportato solo su Linux). ZGC opera in modalità passiva, minimizzando il più possibile i ritardi causati dalla garbage collection (il tempo di arresto durante l'uso di ZGC non supera i 10 ms) e può funzionare sia con heap di piccole dimensioni che con enormi heap, che variano da diverse centinaia di megabyte fino a diversi terabyte.
  • Rimossi toolkit e API per la compressione di file JAR utilizzando l'algoritmo Pack200.

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