Tout sur Java12 - Nouvelles fonctionnalités, sécurité et déclaration d'expression de commutateur (exemples)
Publié: 2019-04-07 Le 19th March 2019
, Java12 est sorti. Comme nous le savons, Java12
faisait partie de la version rapide, il a été publié seulement 6 mois après la sortie de Java11.
Dans ce didacticiel, nous passerons en revue toutes les modifications et les nouvelles fonctionnalités de Java12.
Personnellement je suis passé à Java12 pour tout mon développement mais pour le cycle de production c'est trop tôt. Gardez ce didacticiel dans vos favoris lorsque vous souhaitez passer à Java12 pour tous vos projets de production.
Quoi de neuf dans Java12 ? Nouvelles fonctionnalités de Java12 :
Il existe de nombreuses fonctionnalités internes et liées au flux de travail utilisateur dans Java12 qui ont changé. Voyons ce qu'il y a à l'intérieur de Java 12.
Changement-1) Déchargement de classe simultanée
Normal Garbage Collector décharge généralement la variable inutilisée pendant le cycle GC et nous remarquons généralement un arrêt/pause dans le processus, ou une augmentation du processeur pendant ce temps. Habituellement, nous ne le remarquons même pas.
Avec ZGC
(Z Garbage Collector) - Java12 prend également en charge le déchargement simultané des classes. Comme cela se produit pendant le cycle GC normal, il n'y a pas de pause ni d'utilisation supplémentaire de la mémoire.
Par défaut, ZGC est activé dans Java12. Aucune autre action requise
Comment désactiver ZGC ?
- Démarrez simplement votre application avec l'argument de ligne de commande JVM
-XX:-ClassUnloading
Changement-2) Obtenez plus de détails sur JVM Crash
En cas d'erreur OOM (Out Of Memory) ou de plantage de la JVM, Java crée généralement des fichiers de vidage avec tous les détails.
1 |
- XX : HeapDumpPath =/ tmp / crunchify / - XX : + HeapDumpOnOutOfMemoryError |
Avec ces paramètres JVM, les fichiers de vidage seront créés sous le dossier /tmp/crunchify/
en cas d'erreur OOM.
Il y a une autre option ajoutée dans Java12 :
1 |
- XX : + ExtensiveErrorReports |
Un nouveau fichier journal sera créé nommé hs_err<pid>.log
avec tous les détails sur le crash de la JVM. Ceci est très utile pour votre environnement de production si vous rencontrez des plantages fréquents et souhaitez déboguer davantage.
Par défaut, il est désactivé, mais vous pouvez activer un rapport d'incident complet en ajoutant le paramètre de ligne de commande JVM ci-dessus.
Changement-3) Formatage des nombres compacts
java.text ajoute la prise en charge du format numérique compact. 100o
peut être mentionné comme 1K
et 100000
peut être mentionné comme 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 ) ; } } |
Résultat:
1 |
NumberFormat . Style . SHORT Result : 100K |
Changement-4) Améliorations de la sécurité Java
security-libs/java.security
change :
- interdire et autoriser les options pour java.security.manager
- si
disallow
alors System.setSecurityManager
ne peut pas être utilisé pour définir le gestionnaire de sécurité.
- si
- Option -groupname ajoutée à la génération de paires de clés keytool
- un utilisateur peut spécifier un groupe nommé lors de la génération d'une paire de clés.
- Personnalisation
PKCS12 keystore
- comprend des algorithmes et des paramètres pour
- protection des clés
- certificat de protection
- MacData
- comprend des algorithmes et des paramètres pour
- Nouveaux événements de sécurité JFR
- Qu'est-ce que JFR (Java Flight Recorder)
- 4 nouveaux événements JFR ajoutés
- jdk.X509Certificat
- jdk.X509Validation
- jdk.TLSHhandshake
- jdk.SecurityPropertyModification
Changement-5) JEP 325 : Changer d'expressions
L' Switch statement
améliorée est désormais prise en charge dans Java12.
-
case L -> syntax
. Ici, aucune pause n'est nécessaire. - Utilisation de l'expression de commutation
- c'est une instruction switch simplifiée
- si une étiquette correspond, alors seule l'expression à droite d'une étiquette fléchée est exécutée.
- Aucune instruction break n'est nécessaire.
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 Résultat :
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 |
Changement-6) API des constantes JVM
java.lang.invoke.constant
: Comme vous le savez peut-être, la classe Java a un pool constant qui stocke tous les opérandes au moment de l'exécution.
Java12 ajoute une API pour invoquer des constantes lors de l'exécution.
Fonctionnalités supprimées de Java12 :
Fonctionnalités obsolètes de Java12 :
Faites-moi savoir si vous avez un tutoriel pratique sur Java12 que vous aimeriez inclure ici.