Alles über Java12 – Neue Features, Sicherheit und Switch Expression Statement (Beispiele)
Veröffentlicht: 2019-04-07 Am 19th March 2019
wurde Java12 veröffentlicht. Wie wir wissen, war Java12
Teil der schnellen Veröffentlichung, es wurde nur 6 Monate nach der Veröffentlichung von Java11 veröffentlicht.
In diesem Tutorial werden wir alle Änderungen und neuen Funktionen von Java12 durchgehen.
Persönlich habe ich für meine gesamte Entwicklung auf Java12 umgestellt, aber für den Produktionszyklus ist es noch zu früh. Speichern Sie dieses Tutorial als Lesezeichen, wenn Sie für alle Ihre Produktionsprojekte zu Java12 wechseln möchten.
Was ist neu in Java12? Neue Funktionen in Java12:
Es gibt einige interne und benutzerbezogene Funktionen in Java12, die sich geändert haben. Werfen wir einen Blick darauf, was in Java 12 steckt.
Änderung-1) Gleichzeitiges Entladen der Klasse
Der normale Garbage Collector entlädt normalerweise ungenutzte Variablen während des GC-Zyklus, und wir bemerken normalerweise einen Stopp/eine Pause im Prozess oder eine CPU-Zunahme während dieser Zeit. Normalerweise merken wir das gar nicht.
Mit ZGC
(Z Garbage Collector) unterstützt Java12 auch das gleichzeitige Entladen von Klassen. Da dies während des normalen GC-Zyklus geschieht, gibt es keine Pause und auch keine zusätzliche Speichernutzung mehr.
Standardmäßig ist ZGC in Java12 aktiviert. Keine Aktion mehr erforderlich
Wie deaktiviere ich ZGC?
- Starten Sie einfach Ihre Anwendung mit dem JVM-Befehlszeilenargument
-XX:-ClassUnloading
Änderung-2) Weitere Informationen zum JVM-Absturz erhalten
Wenn ein OOM-Fehler (Out Of Memory) auftritt oder JVM abstürzt, erstellt Java normalerweise Dump-Dateien mit allen Details.
1 |
- XX : HeapDumpPath =/ tmp / crunchify / - XX : + HeapDumpOnOutOfMemoryError |
Mit diesen JVM-Parametern werden Dump-Dateien im Ordner /tmp/crunchify/
bei einem OOM-Fehler erstellt.
In Java12 wurde eine weitere Option hinzugefügt:
1 |
- XX : + ExtensiveErrorReports |
Es wird eine neue Protokolldatei namens hs_err<pid>.log
mit allen Details zum JVM-Absturz erstellt. Dies ist sehr hilfreich für Ihre Produktionsumgebung, wenn Sie häufige Abstürze sehen und mehr debuggen möchten.
Standardmäßig ist es deaktiviert, aber Sie können einen umfangreichen Absturzbericht aktivieren, indem Sie den obigen JVM-Befehlszeilenparameter hinzufügen.
Change-3) Kompakte Zahlenformatierung
java.text fügt Unterstützung für das kompakte Zahlenformat hinzu. 100o
kann als 1K
und 100000
als 100K
bezeichnet werden.
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 ) ; } } |
Ergebnis:
1 |
NumberFormat . Style . SHORT Result : 100K |
Änderung-4) Java-Sicherheitsverbesserungen
Änderungen security-libs/java.security
:
- disallow und allow Optionen für java.security.manager
- wenn
disallow
dann System.setSecurityManager
kann nicht zum Festlegen des Sicherheitsmanagers verwendet werden.
- wenn
- -groupname-Option Der Keytool-Schlüsselpaargenerierung hinzugefügt
- Ein Benutzer kann beim Generieren eines Schlüsselpaars eine benannte Gruppe angeben.
- Anpassen
PKCS12 keystore
Generierung- enthält Algorithmen und Parameter für
- Schlüsselschutz
- Zertifikatsschutz
- MacData
- enthält Algorithmen und Parameter für
- Neue JFR-Sicherheitsereignisse
- Was ist JFR (Java Flight Recorder)
- 4 neue JFR-Events hinzugefügt
- jdk.X509Zertifikat
- jdk.X509Validierung
- jdk.TLSHandshake
- jdk.SecurityPropertyModification
Change-5) JEP 325: Ausdrücke wechseln
Erweiterte Switch statement
wird jetzt in Java12 unterstützt.
- Java 12-basierter
case L -> syntax
. Hier ist keine Pause nötig. - Verwendung des Switch-Ausdrucks
- Dies ist eine vereinfachte Switch-Anweisung
- Wenn ein Label gefunden wird, wird nur der Ausdruck rechts neben einem Pfeillabel ausgeführt.
- Keine Break-Anweisung erforderlich.
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 ) ; } } |

Ergebnis von IntelliJ IDEA:
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 |
Änderung-6) JVM-Konstanten-API
java.lang.invoke.constant
: Wie Sie vielleicht wissen, hat die Java-Klasse einen konstanten Pool, der alle Operanden zur Laufzeit speichert.
Java12 fügt eine API zum Aufrufen von Konstanten zur Laufzeit hinzu.
Entfernte Funktionen von Java12:
Veraltete Funktionen von Java12:
Lassen Sie mich wissen, wenn Sie ein praktisches Tutorial zu Java12 haben, das Sie hier einfügen möchten.