ทุกอย่างเกี่ยวกับ Java12 – คุณลักษณะใหม่ ความปลอดภัย และคำสั่งนิพจน์สวิตช์ (ตัวอย่าง)
เผยแพร่แล้ว: 2019-04-07 เมื่อวันที่ 19th March 2019
Java12 เปิดตัว อย่างที่เราทราบดีว่า Java12
เป็นส่วนหนึ่งของการรีลีสอย่างรวดเร็ว มันถูกปล่อยออกมาภายใน 6 เดือนหลังจาก Java11 ออกวางจำหน่าย
ในบทช่วยสอนนี้ เราจะพูดถึงการเปลี่ยนแปลงทั้งหมดและคุณสมบัติใหม่เกี่ยวกับ Java12
โดยส่วนตัวแล้วฉันเปลี่ยนมาใช้ Java12 สำหรับการพัฒนาทั้งหมดของฉัน แต่สำหรับวงจรการผลิต มันเร็วเกินไป เก็บบุ๊กมาร์กบทช่วยสอนนี้ไว้เมื่อคุณต้องการเปลี่ยนไปใช้ Java12 สำหรับโปรเจ็กต์ที่ใช้งานจริงทั้งหมดของคุณ
มีอะไรใหม่ใน Java12 คุณสมบัติใหม่ใน Java12:
มีคุณลักษณะที่เกี่ยวข้องกับเวิร์กโฟลว์ภายในและผู้ใช้ค่อนข้างน้อยใน Java12 ซึ่งมีการเปลี่ยนแปลง มาดูกันว่ามีอะไรอยู่ใน Java 12
Change-1) การยกเลิกการโหลดคลาสพร้อมกัน
Normal Garbage Collector มักจะยกเลิกการโหลดตัวแปรที่ไม่ได้ใช้ระหว่างรอบ GC และเรามักจะสังเกตเห็นการหยุด/หยุดชั่วคราวในกระบวนการ หรือ CPU เพิ่มขึ้นในช่วงเวลานั้น ปกติเราไม่ทันสังเกตว่า
ด้วย ZGC
(Z Garbage Collector) - Java12 รองรับการขนถ่ายคลาสพร้อมกันด้วย เนื่องจากสิ่งนี้เกิดขึ้นระหว่างรอบ GC ปกติ จึงไม่มีการหยุดชั่วคราวและไม่มีการใช้หน่วยความจำเพิ่มเติมด้วย
โดยค่าเริ่มต้น ZGC จะเปิดใช้งานใน Java12 ไม่ต้องดำเนินการใดๆ อีกต่อไป
จะปิดการใช้งาน ZGC ได้อย่างไร?
- เพียงเริ่มแอปพลิเคชันของคุณด้วยอาร์กิวเมนต์บรรทัดคำสั่ง JVM
-XX:-ClassUnloading
การเปลี่ยนแปลง-2) รับรายละเอียดเพิ่มเติมเกี่ยวกับ JVM Crash
เมื่อมีข้อผิดพลาด OOM (หน่วยความจำไม่เพียงพอ) หรือ JVM ขัดข้อง โดยปกติ Java จะสร้างไฟล์ดัมพ์พร้อมรายละเอียดทั้งหมด
1 |
- XX : HeapDumpPath =/ tmp / crunchify / - XX : + HeapDumpOnOutOfMemoryError |
ด้วยพารามิเตอร์ JVM นี้ ไฟล์ดัมพ์จะถูกสร้างขึ้นภายใต้โฟลเดอร์ /tmp/crunchify/
บนข้อผิดพลาด OOM
มีการเพิ่มอีกหนึ่งตัวเลือกใน Java12:
1 |
- XX : + ExtensiveErrorReports |
ไฟล์บันทึกใหม่จะถูกสร้างขึ้นชื่อ hs_err<pid>.log
พร้อมรายละเอียดทั้งหมดเกี่ยวกับความผิดพลาดของ JVM สิ่งนี้มีประโยชน์มากสำหรับสภาพแวดล้อมการผลิตของคุณ หากคุณพบข้อขัดข้องบ่อยครั้งและต้องการแก้ไขจุดบกพร่องเพิ่มเติม
โดยค่าเริ่มต้น จะถูกปิดใช้งาน แต่คุณสามารถเปิดใช้งานรายงานข้อขัดข้องที่ครอบคลุมได้โดยการเพิ่มพารามิเตอร์บรรทัดคำสั่ง JVM ด้านบน
Change-3) การจัดรูปแบบตัวเลขขนาดกะทัดรัด
java.text เพิ่มการรองรับรูปแบบตัวเลขขนาดกะทัดรัด 100o
สามารถถูกกล่าวถึงเป็น 1K
และ 100000
สามารถกล่าวถึงเป็น 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 ) ; } } |
ผลลัพธ์:
1 |
NumberFormat . Style . SHORT Result : 100K |
Change-4) การปรับปรุงความปลอดภัยของ Java
การเปลี่ยนแปลง security-libs/java.security
:
- ไม่อนุญาตและอนุญาตตัวเลือกสำหรับ java.security.manager
- ถ้า
disallow
แล้วระบบ ไม่สามารถใช้setSecurityManager
เพื่อตั้งค่าตัวจัดการความปลอดภัย
- ถ้า
- -groupname ตัวเลือกที่เพิ่มไปยัง keytool การสร้างคู่คีย์
- ผู้ใช้สามารถระบุกลุ่มที่มีชื่อเมื่อสร้างคู่คีย์
- การปรับแต่งการสร้าง
PKCS12 keystore
- รวมถึงอัลกอริทึมและพารามิเตอร์สำหรับ
- การป้องกันกุญแจ
- การคุ้มครองใบรับรอง
- MacData
- รวมถึงอัลกอริทึมและพารามิเตอร์สำหรับ
- เหตุการณ์ความปลอดภัย JFR ใหม่
- JFR คืออะไร (Java Flight Recorder)
- เพิ่มกิจกรรม JFR ใหม่ 4 รายการ
- jdk.X509ใบรับรอง
- jdk.X509การตรวจสอบความถูกต้อง
- jdk.TLS จับมือ
- jdk.SecurityPropertyModification
เปลี่ยน-5) JEP 325: เปลี่ยนนิพจน์
รองรับคำสั่ง Enhanced Switch statement
ใน Java12 แล้ว
-
case L -> syntax
ที่นี่ไม่จำเป็นต้องหยุดพัก - การใช้นิพจน์สวิตช์
- นี่คือคำสั่งสวิตช์แบบง่าย
- หากป้ายกำกับตรงกัน นิพจน์ทางด้านขวาของป้ายกำกับลูกศรเท่านั้นที่จะถูกดำเนินการ
- ไม่จำเป็นต้องมีคำสั่งแบ่ง
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:
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 |
เปลี่ยน-6) ค่าคงที่ JVM API
java.lang.invoke.constant
: อย่างที่คุณอาจทราบ คลาส Java มีพูลคงที่ซึ่งเก็บตัวถูกดำเนินการทั้งหมดที่รันไทม์
Java12 เพิ่ม API สำหรับการเรียกใช้ค่าคงที่ที่รันไทม์
คุณสมบัติที่ถูกลบออกจาก Java12:
คุณลักษณะที่เลิกใช้จาก Java12:
แจ้งให้เราทราบหากคุณมีบทช่วยสอนที่มีประโยชน์เกี่ยวกับ Java12 ซึ่งคุณต้องการรวมไว้ที่นี่