Totul despre Java12 – Caracteristici noi, securitate și declarație de expresie a comutatorului (exemple)
Publicat: 2019-04-07 Pe 19th March 2019
, Java12 a fost lansat. După cum știm, Java12
a făcut parte din lansarea rapidă, a fost lansat la doar 6 luni după lansarea Java11.
În acest tutorial, vom trece peste toate modificările și noile funcții despre Java12.
Personal, am trecut la Java12 pentru toată dezvoltarea mea, dar pentru ciclul de producție este prea devreme. Păstrați acest tutorial marcat atunci când doriți să treceți la Java12 pentru toate proiectele dvs. de producție.
Ce este nou în Java12? Caracteristici noi în Java12:
Există destul de multe funcții interne și legate de fluxul de lucru al utilizatorului în Java12, care s-au schimbat. Să aruncăm o privire la ce este în interiorul Java 12.
Modificare-1) Descărcare simultană a clasei
Colectorul de gunoi normal descarcă de obicei variabilele neutilizate în timpul ciclului GC și, de obicei, observăm o oarecare oprire/pauză în proces sau o creștere a CPU în acest timp. De obicei nici nu observăm asta.
Cu ZGC
(Z Garbage Collector) – Java12 acceptă și descărcarea simultană a clasei. Deoarece acest lucru se întâmplă în timpul ciclului normal de GC, nu există nicio pauză și nici o utilizare suplimentară a memoriei.
În mod implicit, ZGC este activat în Java12. Nu mai este necesară nicio acțiune
Cum se dezactivează ZGC?
- Doar porniți aplicația cu argumentul liniei de comandă JVM
-XX:-ClassUnloading
Modificare-2) Obțineți mai multe detalii despre JVM Crash
Când există o eroare OOM (Out Of Memory) sau se blochează JVM, de obicei Java creează fișiere de descărcare cu toate detaliile.
1 |
- XX : HeapDumpPath =/ tmp / crunchify / - XX : + HeapDumpOnOutOfMemoryError |
Cu acești parametri JVM, fișierele Dump vor fi create în folderul /tmp/crunchify/
la eroarea OOM.
Mai există o opțiune adăugată în Java12:
1 |
- XX : + ExtensiveErrorReports |
Va fi creat un nou fișier jurnal numit hs_err<pid>.log
cu toate detaliile despre blocarea JVM. Acest lucru este foarte util pentru mediul dvs. de producție dacă observați blocări frecvente și doriți să depanați mai multe.
În mod implicit, este dezactivat, dar puteți activa un raport extins de blocare adăugând mai sus parametrul liniei de comandă JVM.
Modificare-3) Formatarea compactă a numărului
java.text adaugă suport pentru formatul numeric compact. 100o
poate fi menționat ca 1K
și 100000
poate fi menționat ca 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 ) ; } } |
Rezultat:
1 |
NumberFormat . Style . SHORT Result : 100K |
Modificare-4) Îmbunătățiri de securitate Java
security-libs/java.security
modificări:
- interziceți și permiteți Opțiuni pentru java.security.manager
- dacă nu este
disallow
, atunci System.setSecurityManager
nu poate fi folosit pentru a seta managerul de securitate.
- dacă nu este
- Opțiunea -groupname Adăugat la keytool Generarea perechilor de chei
- un utilizator poate specifica un grup numit atunci când generează o pereche de chei.
- Personalizarea generației
PKCS12 keystore
- include algoritmi și parametri pentru
- protecția cheii
- certificat de protectie
- MacData
- include algoritmi și parametri pentru
- Noi evenimente de securitate JFR
- Ce este JFR (Java Flight Recorder)
- Au fost adăugate 4 evenimente JFR noi
- jdk.X509Certificat
- jdk.X509Validare
- jdk.TLSHandshake
- jdk.SecurityPropertyModification
Modificare-5) JEP 325: Schimbarea expresiilor
Switch statement
îmbunătățită este acum acceptată în Java12.
-
case L -> syntax
. Aici nu este necesară nicio pauză. - Utilizarea expresiei Switch
- aceasta este declarația de comutare simplificată
- dacă o etichetă este potrivită, atunci este executată doar expresia din dreapta unei etichete săgeată.
- Nu este nevoie de declarație de pauză.
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 Rezultat:
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 |
Modificare-6) JVM Constants API
java.lang.invoke.constant
: După cum probabil știți, clasa Java are un pool constant care stochează toți operanzii în timpul execuției.
Java12 adaugă API pentru invocarea constantelor în timpul execuției.
Caracteristici eliminate din Java12:
Caracteristici depreciate de la Java12:
Anunțați-mă dacă aveți vreun tutorial la îndemână despre Java12 pe care ați dori să îl includeți aici.