Wszystko o Java12 — oświadczenie o nowych funkcjach, zabezpieczeniach i wyrażeniu przełącznika (przykłady)
Opublikowany: 2019-04-07 19th March 2019
ukazała się Java12. Jak wiemy, Java12
była częścią szybkiego wydania, została wydana zaledwie 6 miesięcy po wydaniu Java11.
W tym samouczku omówimy wszystkie zmiany i nowe funkcje dotyczące Java12.
Osobiście przerzuciłem się na Javę12 na cały mój rozwój, ale na cykl produkcyjny jest za wcześnie. Zachowaj ten samouczek w zakładkach, jeśli chcesz przełączyć się na Java12 dla wszystkich swoich projektów produkcyjnych.
Co nowego w Javie12? Nowe funkcje w Javie12:
W Javie12 zmieniło się wiele funkcji wewnętrznych i związanych z przepływem pracy użytkownika. Przyjrzyjmy się, co jest w Javie 12.
Zmiana-1) Równoczesne rozładowywanie klas
Normalny Garbage Collector zwykle rozładowuje nieużywaną zmienną podczas cyklu GC i zwykle zauważamy pewne zatrzymanie/pauzę w procesie lub wzrost mocy procesora w tym czasie. Zwykle nawet tego nie zauważamy.
Z ZGC
(Z Garbage Collector) – Java12 obsługuje również równoczesne rozładowywanie klas. Ponieważ dzieje się to podczas normalnego cyklu GC, nie ma żadnej przerwy ani dodatkowego użycia pamięci.
Domyślnie ZGC jest włączone w Java12. Nie musisz nic więcej robić
Jak wyłączyć ZGC?
- Po prostu uruchom aplikację za pomocą argumentu wiersza poleceń JVM
-XX:-ClassUnloading
Zmiana-2) Dowiedz się więcej o awarii JVM
Gdy wystąpi błąd OOM (brak pamięci) lub awaria JVM, zwykle Java tworzy pliki zrzutu ze wszystkimi szczegółami.
1 |
- XX : HeapDumpPath =/ tmp / crunchify / - XX : + HeapDumpOnOutOfMemoryError |
Dzięki tym parametrom maszyny JVM pliki zrzutu zostaną utworzone w folderze /tmp/crunchify/
w przypadku błędu OOM.
W Java12 dodano jeszcze jedną opcję:
1 |
- XX : + ExtensiveErrorReports |
Zostanie utworzony nowy plik dziennika o nazwie hs_err<pid>.log
ze wszystkimi szczegółami dotyczącymi awarii JVM. Jest to bardzo przydatne w środowisku produkcyjnym, jeśli często występują awarie i chcesz więcej debugować.
Domyślnie jest wyłączony, ale możesz włączyć obszerny raport o awariach, dodając powyższy parametr wiersza poleceń JVM.
Zmiana-3) Kompaktowe formatowanie liczb
java.text dodaje obsługę kompaktowego formatu liczb. 100o
można wymienić jako 1K
, a 100000
można wymienić jako 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 ) ; } } |
Wynik:
1 |
NumberFormat . Style . SHORT Result : 100K |
Zmiana-4) Ulepszenia bezpieczeństwa Java
security-libs/java.security
zmiany:
- nie zezwalaj i zezwalaj na opcje dla java.security.manager
- jeśli
disallow
, to System.setSecurityManager
nie może być użyty do ustawienia menedżera bezpieczeństwa.
- jeśli
- -groupname Opcja dodana do keytool Generowanie pary kluczy
- użytkownik może określić nazwaną grupę podczas generowania pary kluczy.
- Dostosowywanie generowania
PKCS12 keystore
- zawiera algorytmy i parametry dla
- ochrona klucza
- ochrona certyfikatu
- MacDane
- zawiera algorytmy i parametry dla
- Nowe wydarzenia związane z bezpieczeństwem JFR
- Co to jest JFR (Java Flight Recorder)
- Dodano 4 nowe wydarzenia JFR
- jdk.X509Certyfikat
- jdk.X509Walidacja
- jdk.TLSHandshake
- jdk.SecurityPropertyModyfikacja
Zmiana-5) JEP 325: Przełącz wyrażenia
Switch statement
jest teraz obsługiwana w Java12.
- Oparty na Javie 12
case L -> syntax
. Tutaj nie ma żadnej przerwy. - Korzystanie z wyrażenia przełącznika
- to jest uproszczona instrukcja przełącznika
- jeśli etykieta jest dopasowana, wykonywane jest tylko wyrażenie z prawej strony etykiety strzałki.
- Nie jest potrzebne oświadczenie o przerwaniu.
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 Wynik:
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 |
Zmiana-6) Interfejs API stałych maszyn JVM
java.lang.invoke.constant
: Jak zapewne wiesz, klasa Javy ma stałą pulę, która przechowuje wszystkie operandy w czasie wykonywania.
Java12 dodaje API do wywoływania stałych w czasie wykonywania.
Usunięto funkcje z Java12:
Przestarzałe funkcje Java12:
Daj mi znać, jeśli masz jakiś przydatny samouczek dotyczący Java12, który chciałbyś tutaj zamieścić.