Tutto su Java12: nuove funzionalità, sicurezza e dichiarazione di espressione dello switch (esempi)
Pubblicato: 2019-04-07 Il 19th March 2019
è stato rilasciato Java12. Come sappiamo Java12
faceva parte del rilascio rapido, è stato rilasciato solo 6 mesi dopo il rilascio di Java11.
In questo tutorial, esamineremo tutte le modifiche e le nuove funzionalità di Java12.
Personalmente sono passato a Java12 per tutto il mio sviluppo ma per il ciclo produttivo è troppo presto. Mantieni questo tutorial tra i preferiti quando vuoi passare a Java12 per tutti i tuoi progetti di produzione.
Cosa c'è di nuovo in Java12? Nuove funzionalità in Java12:
Ci sono alcune funzionalità interne e relative al flusso di lavoro dell'utente in Java12 che sono cambiate. Diamo un'occhiata a cosa c'è dentro Java 12.
Modifica-1) Scaricamento di classi simultanee
Il normale Garbage Collector di solito scarica la variabile non utilizzata durante il ciclo GC e di solito notiamo qualche arresto/pausa nel processo o aumento della CPU durante quel periodo. Di solito non ce ne accorgiamo nemmeno.
Con ZGC
(Z Garbage Collector) – Java12 supporta anche lo scarico di classi simultanee. Poiché ciò accade durante il normale ciclo GC, non ci sono pause e non c'è più utilizzo di memoria extra.
Per impostazione predefinita ZGC è abilitato in Java12. Non sono necessarie altre azioni
Come disabilitare ZGC?
- Basta avviare l'applicazione con l'argomento della riga di comando JVM
-XX:-ClassUnloading
Modifica-2) Ottieni maggiori dettagli su JVM Crash
Quando si verifica un errore OOM (memoria insufficiente) o JVM si arresta in modo anomalo, di solito Java crea file di dump con tutti i dettagli.
1 |
- XX : HeapDumpPath =/ tmp / crunchify / - XX : + HeapDumpOnOutOfMemoryError |
Con questi parametri JVM, i file Dump verranno creati nella cartella /tmp/crunchify/
in caso di errore OOM.
C'è un'altra opzione aggiunta in Java12:
1 |
- XX : + ExtensiveErrorReports |
Verrà creato un nuovo file di registro denominato hs_err<pid>.log
con tutti i dettagli sull'arresto anomalo della JVM. Questo è molto utile per l'ambiente di produzione se si verificano frequenti arresti anomali e si desidera eseguire di più il debug.
Per impostazione predefinita è disabilitato, ma puoi abilitare un rapporto di arresto anomalo completo aggiungendo il parametro della riga di comando JVM sopra.
Modifica-3) Formattazione numerica compatta
java.text aggiunge il supporto per il formato numerico compatto. 100o
può essere indicato come 1K
e 100000
può essere indicato come 100K
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package crunchify . com . tutorials ; import java . text . NumberFormat ; import java . util . Locale ; /** * @author Crunchify.com * Java12 Compact Number format example * */ public class CrunchifyJava12CompactNumber { public static void main ( String args [ ] ) { // NumberFormat is the abstract base class for all number formats. // This class provides the interface for formatting and parsing numbers. NumberFormat also provides methods for determining which locales have number formats, and what their names are. NumberFormat crunchifyFormat = NumberFormat . getCompactNumberInstance ( Locale . US , NumberFormat . Style . SHORT ) ; // getCompactNumberInstance returns a compact number format for the specified locale and formatStyle. String crunchifyResult = crunchifyFormat . format ( 100000 ) ; System . out . println ( "NumberFormat.Style.SHORT Result: " + crunchifyResult ) ; } } |
Risultato:
1 |
NumberFormat . Style . SHORT Result : 100K |
Modifica-4) Miglioramenti alla sicurezza Java
security-libs/java.security
cambia:
- non consentire e consentire Opzioni per java.security.manager
- se
disallow
allora System.setSecurityManager
non può essere utilizzato per impostare il gestore della sicurezza.
- se
- Opzione -groupname Aggiunta al keytool Generazione di coppie di chiavi
- un utente può specificare un gruppo denominato durante la generazione di una coppia di chiavi.
- Personalizzazione della generazione
PKCS12 keystore
- include algoritmi e parametri per
- protezione delle chiavi
- protezione del certificato
- MacDati
- include algoritmi e parametri per
- Nuovi eventi di sicurezza JFR
- Che cos'è JFR (Java Flight Recorder)
- Aggiunti 4 nuovi eventi JFR
- jdk.X509Certificato
- jdk.X509Convalida
- jdk.TLSHandshake
- jdk.SecurityPropertyModification
Modifica-5) JEP 325: Cambia espressioni
L' Switch statement
avanzata è ora supportata in Java12.
-
case L -> syntax
. Qui non c'è nessuna pausa necessaria. - Uso dell'espressione Switch
- questa è un'istruzione switch semplificata
- se viene trovata una corrispondenza con un'etichetta, viene eseguita solo l'espressione a destra dell'etichetta di una freccia.
- Non è necessaria alcuna dichiarazione di interruzione.
CrunchifyJava12SwitchExample.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
package crunchify . com . tutorials ; import java . util . Scanner ; /** * @author Crunchify.com * What's new in Java12 Switch statement? * */ public class CrunchifyJava12SwitchExample { public static void main ( String [ ] args ) { Scanner crunchifyObj = new Scanner ( System . in ) ; log ( "Enter company name from: Google, Facebook, PayPal, eBay, Twitter, LinkedIn, Apple" ) ; String company = crunchifyObj . nextLine ( ) ; log ( "Selected Company: " + company ) ; // Pre-Java12 Switch statement switch ( company ) { case "Google" : case "Facebook" : case "PayPal" : case "eBay" : case "Twitter" : log ( "Pre-Java12: This switch is for companies Google, Facebook, PayPal, eBay & Twitter" ) ; break ; case "" : case "Apple" : case "LinkedIn" : log ( "Pre-Java12: This switch is for companies Apple & LinkedIn" ) ; break ; default : log ( "Pre-Java12: Oops... Invalid company" ) ; } /** * Java 12 based case L -> syntax operation. * Here there isn't any break necessary. */ switch ( company ) { case "Google" , "Facebook" , "PayPal" , "eBay" , "Twitter" - > log ( "Java12: This switch is for companies Google, Facebook, PayPal, eBay & Twitter" ) ; case "Apple" , "LinkedIn" - > log ( "Java12: This switch is for companies Apple & LinkedIn" ) ; default - > { log ( "Java12: Oops... Invalid company" ) ; } } /** * This is switch expression */ final String companyName ; companyName = switch ( company ) { case "Google" , "Facebook" , "PayPal" , "eBay" , "Twitter" - > ( "Java12 Expression: This switch is for companies Google, Facebook, PayPal, eBay & Twitter" ) ; case "Apple" , "LinkedIn" - > ( "Java12 Expression: This switch is for companies Apple & LinkedIn" ) ; /** * it's also possible to do switch operation without a block and break */ default - > { break "Java12 Expression: Oops... Invalid company" ; } } ; log ( companyName ) ; } public static void log ( String result ) { System . out . println ( result ) ; } } |

IntelliJ IDEA Risultato:
1 2 3 4 5 6 7 8 |
Enter company name from : Google , Facebook , PayPal , eBay , Twitter , LinkedIn , Apple Twitter Selected Company : Twitter Pre - Java12 : This switch is for companies Google , Facebook , PayPal , eBay & Twitter Java12 : This switch is for companies Google , Facebook , PayPal , eBay & Twitter Java12 Expression : This switch is for companies Google , Facebook , PayPal , eBay & Twitter |
Modifica-6) API delle costanti JVM
java.lang.invoke.constant
: come forse saprai, la classe Java ha un pool costante che memorizza tutti gli operandi in fase di esecuzione.
Java12 aggiunge l'API per invocare le costanti in fase di esecuzione.
Funzionalità rimosse da Java12:
Funzionalità deprecate da Java12:
Fammi sapere se hai qualche tutorial utile su Java12 che vorresti includere qui.