JavaRush /Java Blog /Random-IT /Java 12 è qui: cosa c'è di nuovo?

Java 12 è qui: cosa c'è di nuovo?

Pubblicato nel gruppo Random-IT
Quindi, Java è apparso al numero 12. E anche se questa non è una versione LTS (ovvero, non un supporto a lungo termine, non una versione che sarà supportata per molto tempo. La versione 11 è considerata la prima versione LTS con un otto- periodo di supporto di un anno ), negli aggiornamenti sono apparse cose interessanti. Diamo un'occhiata ai più importanti. Ricordiamo che in Java le proposte di modifica sono abbreviate in jeps (da JDK Enhancement Proposal). Java 12 è qui: cosa c'è di nuovo?  -1

Il JDK 12 di Jep più interessante

189: Shenandoah: un Garbage Collector a basso tempo di pausa (sperimentale) Il Garbage Collector, Shenandoah, utilizza un nuovo algoritmo che riduce il tempo di esecuzione eseguendo la pulizia simultaneamente con l'esecuzione dei thread Java. In questo caso, il tempo di pausa in Shenandoah sarà lo stesso indipendentemente dalla dimensione dell'heap. Per qualche ragione, Oracle non ha incluso Sheandoah nelle sue build di rilascio "ufficiali", nonostante il fatto che gli sviluppatori considerino questa funzionalità una delle più importanti nella nuova versione. Quindi, se hai intenzione di provare il Garbage Collector avanzato, devi utilizzare build di terze parti, come Azul . 230: Microbenchmark Suite Microbenchmark è un microbenchmark che misura le prestazioni di alcuni piccoli elementi. In Java vengono scritti ed eseguiti utilizzando il framework JMH. Dalla versione 12, JMH è stato aggiunto al JDK e al suo interno sono già scritti dei test , il che semplifica la vita agli sviluppatori. 325: Switch Expressions (Anteprima) Una nuova forma di scrittura di un'espressione con un'istruzione switch. La pagina delle funzionalità fornisce un codice di esempio utilizzando lo switch tradizionale, dove l'uso costante di break lo rende inutilmente prolisso, portando a frequenti errori casuali.
switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        break;
}
Gli autori dell'aggiornamento propongono di introdurre una nuova forma dell'etichetta di commutazione “case L ->” per indicare chiaramente che solo il codice a destra dell'etichetta verrà eseguito se questa etichetta è adatta. Pertanto, il codice mostrato sopra può essere notevolmente abbreviato utilizzando la nuova sintassi:
switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY                -> System.out.println(7);
    case THURSDAY, SATURDAY     -> System.out.println(8);
    case WEDNESDAY              -> System.out.println(9);
}
334: API delle costanti JVM Il pool di costanti contiene le cosiddette costanti caricabili. Si tratta di valori, ad esempio di tipo String o di qualsiasi tipo primitivo, nonché di artefatti di runtime, come classi e metodi. Quando si lavora con file di classe, i programmatori trarrebbero vantaggio da strumenti convenienti per manipolare le costanti caricabili. Gli autori di questo jep hanno iniziato a risolvere questo problema introducendo nuovi tipi di collegamenti simbolici basati sul valore, ognuno dei quali descriverà un tipo specifico di costanti. Codice dell'innovazione . 340: una porta AArch64, non due Questo nome complesso nasconde una soluzione a un problema sorto in Java 9, quando le porte ARM a 64 bit di Oracle e aarch64 di Red Hat sono apparse contemporaneamente nel kit. Inoltre, già al momento del rilascio di JDK 11, anche Oracle stesso non supportava la versione a 64 bit dei port Oracle. Quindi ora le porte Oracle a 64 bit sono state rimosse, lasciando ARM32 a 32 bit e aarch64 a 64 bit, più produttivo. 341: Archivi CDS predefiniti Un aggiornamento molto interessante in quanto accelera davvero il lancio dell'applicazione. Non è un segreto che quando si avvia un'applicazione Java, un numero enorme di classi inizia a caricarsi e questo è un processo piuttosto lungo. CDS sta per Class Data Sharing e questa funzione ti consente di comprimere tutte queste classi lanciate all'avvio in uno speciale archivio di condivisione dei dati delle classi, utilizzando l'elenco predefinito di queste stesse classi. Di conseguenza, la velocità di avvio dell'applicazione aumenta in modo significativo. 344: Raccolte miste abortiva per G1 G1 è un garbage collector che è diventato il principale garbage collector in JDK 9, sostituendo Parallel GC. In Java 10, G1 ha imparato a raccogliere la spazzatura in più thread. Non tutti però erano contenti del suo lavoro, uno dei problemi principali erano le lunghe pause. Ora possono essere cancellati. G1, sulla base di un'analisi del comportamento del programma, determina la quantità di lavoro, quindi raccoglie gli oggetti "vivi" in un set di raccolta finché non raccoglie tutto, senza fermarsi. Spesso G1 non riusciva a calcolare la quantità di lavoro e lavorava troppo a lungo. Una volta implementato jep-344, G1 può passare alla garbage collection incrementale e se il completamento del passaggio successivo richiede più tempo del ragionevole, quel passaggio può essere interrotto. 346: Restituisce prontamente la memoria impegnata non utilizzata da G1 E qualche altro aggiornamento nel campo del già citato assemblatore G1. A volte capitava che ci fosse un sacco di memoria heap Java, ma nessuno la usava, questa memoria. In Java 12, ora puoi "restituire" la memoria inattiva al sistema operativo. In precedenza, era molto raro che G1 rinunciasse alla memoria, ma ora tutto è stato semplificato. Con la nuova funzionalità, l'applicazione viene definita inattiva se l'intervallo dall'ultima build è scaduto e non esiste un ciclo simultaneo. Un'altra situazione è se o se la funzione getloadavg(), che è stata monitorata per qualche tempo, mostra un carico inferiore alla soglia accettabile impostata. Se si verifica uno dei due eventi, viene avviata la raccolta dei rifiuti parziale. Cosa non ha Java 12: valori letterali di stringhe grezze Molti sviluppatori erano interessati a questa funzionalità, ma non è mai apparsa in questa versione. I suoi autori hanno deciso che aveva ancora bisogno di lavoro. Quindi, osiamo sperare che una funzione per lavorare comodamente con le stringhe letterali appaia in una delle prossime versioni di Java. Il supporto per valori letterali stringa non elaborati consente di lavorare con le informazioni sulla stringa indipendentemente dalla lingua. Ciò elimina la necessità di schermatura. Particolarmente utile nelle espressioni regolari, dove le barre rovesciate sono ampiamente utilizzate, e nel percorso Windows, dove le barre rovesciate vengono utilizzate come delimitatori. Cioè, per evitare tali costruzioni: C:\\My\\Test\\Pack\\
Ogni programmatore incontra spesso l'una o l'altra difficoltà nel proprio lavoro. A volte sono associati all'inesperienza dello sviluppatore, ma a volte all'imperfezione dello strumento stesso. Java è un ottimo linguaggio, ma è tutt'altro che perfetto. Forse hai già incontrato qualcosa in Java e sai cosa vorresti cambiare nel tuo “strumento” (linguaggio)? Condividi nei commenti!

conclusioni

Non c'è stata alcuna rivoluzione in Java 12. Tuttavia, nessuno lo aveva pianificato. Tuttavia, una serie di innovazioni mirano a ottimizzare il funzionamento delle applicazioni e ad accelerare il lavoro, il che è una buona notizia. A proposito, IDEA supporta già JDK 12, quindi puoi provarne le capacità. Naturalmente, pochi aggiornamenti riguardano direttamente i principianti, anche se anche coloro che hanno appena iniziato a imparare JavaRush possono giocare con la nuova opzione (dopo aver impostato il flag --enable-preview).
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION