JavaRush /จาวาบล็อก /Random-TH /Java 12 มาแล้ว: มีอะไรใหม่?

Java 12 มาแล้ว: มีอะไรใหม่?

เผยแพร่ในกลุ่ม
ดังนั้น Java จึงปรากฏที่อันดับ 12 และถึงแม้ว่านี่จะไม่ใช่ LTS release (นั่นคือไม่ใช่ Long term support ไม่ใช่ release ที่จะได้รับการสนับสนุนเป็นเวลานาน เวอร์ชัน11 ถือเป็น LTS release แรกที่มีแปด- ระยะเวลาสนับสนุนปี ) สิ่งที่น่าสนใจปรากฏในการอัปเดต เรามาดูสิ่งที่สำคัญที่สุดกันดีกว่า โปรดจำไว้ว่าใน Java ข้อเสนอการเปลี่ยนแปลงจะย่อว่า jeps (จาก JDK Enhancement Proposal) Java 12 มาแล้ว: มีอะไรใหม่?  - 1

JDK 12 ของ Jep ที่น่าสนใจที่สุด

189: Shenandoah: ตัวรวบรวมขยะแบบหยุดชั่วคราวชั่วคราว (ทดลอง) Shenandoah ตัวรวบรวมขยะใช้อัลกอริธึมใหม่ที่ลดรันไทม์โดยการล้างข้อมูลพร้อมกันด้วยการรันเธรด Java ในกรณีนี้ เวลาหยุดชั่วคราวใน Shenandoah จะเท่ากันไม่ว่าฮีปจะมีขนาดเท่าใดก็ตาม ด้วยเหตุผลบางประการ Oracle ไม่ได้รวม Sheandoah ไว้ในรุ่น "อย่างเป็นทางการ" แม้ว่านักพัฒนาจะถือว่าคุณสมบัตินี้เป็นหนึ่งในคุณสมบัติที่สำคัญที่สุดในรุ่นใหม่ก็ตาม ดังนั้นหากคุณวางแผนที่จะลองใช้ Garbage Collector ขั้น สูง คุณจะต้องใช้บิลด์ของบริษัทอื่น เช่นAzul 230: Microbenchmark Suite Microbenchmark เป็นไมโครเบนช์มาร์กที่ใช้วัดประสิทธิภาพขององค์ประกอบเล็กๆ บางส่วน ใน Java พวกมันถูกเขียนและรันโดยใช้เฟรมเวิร์ก JMH ตั้งแต่เวอร์ชัน 12 เป็นต้นมา JMH ได้ถูกเพิ่มเข้าไปใน JDK และมีการทดสอบที่เขียนไว้แล้ว ซึ่งทำให้ชีวิตของนักพัฒนาง่ายขึ้น 325: Switch Expressions (แสดงตัวอย่าง) รูปแบบใหม่ในการเขียนนิพจน์ด้วยคำสั่ง switch หน้าคุณลักษณะจะแสดงโค้ดตัวอย่างโดยใช้สวิตช์แบบเดิม ซึ่งการใช้ตัวแบ่งอย่างต่อเนื่องทำให้มีรายละเอียดโดยไม่จำเป็น ซึ่งนำไปสู่ข้อผิดพลาดแบบสุ่มบ่อยครั้ง
switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        break;
}
ผู้เขียนการอัปเดตเสนอให้แนะนำรูปแบบใหม่ของป้ายกำกับสวิตช์ "case L ->" เพื่อระบุอย่างชัดเจนว่าจะมีการดำเนินการเฉพาะโค้ดทางด้านขวาของป้ายกำกับเท่านั้นหากป้ายกำกับนี้เหมาะสม ดังนั้นโค้ดที่แสดงด้านบนสามารถย่อให้สั้นลงได้อย่างมากโดยใช้ไวยากรณ์ใหม่:
switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY                -> System.out.println(7);
    case THURSDAY, SATURDAY     -> System.out.println(8);
    case WEDNESDAY              -> System.out.println(9);
}
334: JVM Constants API พูลค่าคงที่มีสิ่งที่เรียกว่าค่าคงที่ที่โหลดได้ ค่าเหล่านี้เป็นค่า เช่น ประเภท String หรือประเภทดั้งเดิมใดๆ รวมถึงส่วนรันไทม์ เช่น คลาสและเมธอด เมื่อทำงานกับไฟล์คลาส โปรแกรมเมอร์จะได้รับประโยชน์จากเครื่องมือที่สะดวกสำหรับการจัดการค่าคงที่ที่โหลดได้ ผู้เขียน jep นี้เริ่มแก้ไขปัญหานี้ด้วยการแนะนำลิงก์สัญลักษณ์ประเภทใหม่ตามค่า ซึ่งแต่ละลิงก์จะอธิบายค่าคงที่ประเภทเฉพาะ รหัสนวัตกรรม 340: พอร์ต AArch64 หนึ่งพอร์ต ไม่ใช่สอง พอร์ต ชื่อที่ซับซ้อนนี้ซ่อนวิธีแก้ไขปัญหาที่เกิดขึ้นใน Java 9 เมื่อพอร์ต ARM 64 บิตของ Oracle และ aarch64 จาก Red Hat ปรากฏในชุดอุปกรณ์ในเวลาเดียวกัน ยิ่งไปกว่านั้น ณ เวลาที่เปิดตัว JDK 11 แม้แต่ Oracle เองก็ยังไม่รองรับพอร์ต Oracle เวอร์ชัน 64 บิต ดังนั้นตอนนี้พอร์ต Oracle 64 บิตจึงถูกลบออก เหลือ ARM32 แบบ 32 บิต และ 64 บิต ซึ่งมีประสิทธิภาพมากกว่า aarch64 341: คลัง CDS เริ่มต้น การอัปเดตที่ดีมากเนื่องจากช่วยให้เปิดแอปพลิเคชันได้เร็วขึ้นจริงๆ ไม่มีความลับว่าเมื่อแอปพลิเคชัน Java เริ่มทำงาน คลาสจำนวนมากจะเริ่มโหลดและนี่เป็นกระบวนการที่ค่อนข้างยาว CDS ย่อมาจาก Class Data Sharing และฟังก์ชันนี้ช่วยให้คุณสามารถรวมคลาสเหล่านี้ทั้งหมดที่เปิดใช้งานเมื่อเริ่มต้นระบบลงในที่เก็บข้อมูลการแบ่งปันข้อมูลคลาสพิเศษ โดยใช้รายการเริ่มต้นของคลาสเดียวกันเหล่านี้ ส่งผลให้ความเร็วในการเปิดแอปพลิเคชั่นเพิ่มขึ้นอย่างมาก 344: คอลเลกชันแบบผสมที่ยกเลิกได้สำหรับ G1 G1 เป็นตัวรวบรวมขยะที่กลายเป็นตัวรวบรวมขยะหลักใน JDK 9 โดยแทนที่ Parallel GC ใน Java 10 G1 เรียนรู้ที่จะรวบรวมขยะในหลายเธรด อย่างไรก็ตามไม่ใช่ทุกคนที่พอใจกับงานของเขาปัญหาหลักประการหนึ่งคือการหยุดชั่วคราวเป็นเวลานาน ตอนนี้พวกเขาสามารถยกเลิกได้ G1 ขึ้นอยู่กับการวิเคราะห์พฤติกรรมของโปรแกรม กำหนดปริมาณงาน จากนั้นรวบรวมวัตถุ "สด" ลงในชุดคอลเลกชันจนกว่าจะรวบรวมทุกอย่างโดยไม่หยุด บ่อยครั้งที่ G1 พลาดการคำนวณปริมาณงานและทำงานนานเกินไป เมื่อมีการใช้ jep-344 แล้ว G1 สามารถสลับไปใช้การรวบรวมขยะแบบเพิ่มหน่วยได้ และหากขั้นตอนถัดไปใช้เวลานานกว่าที่สมเหตุสมผล ขั้นตอนนั้นก็สามารถถูกยกเลิกได้ 346: ส่งคืนหน่วยความจำที่คอมมิตที่ไม่ได้ใช้จาก G1 ทันที และอัพเดตเพิ่มเติมเล็กน้อยในค่ายแอสเซมเบลอร์ G1 ดังกล่าว บางครั้งมันเกิดขึ้นว่ามีหน่วยความจำฮีป Java จำนวนมาก แต่ไม่มีใครใช้ หน่วยความจำนี้ ใน Java 12 ตอนนี้คุณสามารถ "คืน" หน่วยความจำที่ไม่ได้ใช้งานไปยังระบบปฏิบัติการได้แล้ว ก่อนหน้านี้เป็นเรื่องยากมากที่จะให้ G1 สละหน่วยความจำ แต่ตอนนี้ทุกอย่างก็ง่ายขึ้นแล้ว ด้วยคุณลักษณะใหม่นี้ แอปพลิเคชันจะถูกกำหนดให้ไม่ใช้งานหากช่วงเวลาตั้งแต่การสร้างครั้งล่าสุดหมดอายุลง และไม่มีรอบการทำงานพร้อมกัน อีกสถานการณ์หนึ่งคือถ้าฟังก์ชัน getloadavg() ซึ่งได้รับการติดตามมาระยะหนึ่งแล้ว แสดงโหลดต่ำกว่าเกณฑ์ที่ยอมรับได้ที่ตั้งไว้ หากเหตุการณ์ใดเหตุการณ์หนึ่งเกิดขึ้น การรวบรวมขยะบางส่วนจะเริ่มต้นขึ้น สิ่งที่ Java 12 ไม่มี: Raw String Literals นักพัฒนาหลายคนสนใจฟีเจอร์นี้ แต่ก็ไม่เคยปรากฏในรุ่นนี้เลย ผู้เขียนตัดสินใจว่ายังต้องการการปรับปรุง ดังนั้นเราจึงกล้าที่จะหวังว่าฟังก์ชันเพื่อความสะดวกในการทำงานกับตัวอักษรสตริงจะปรากฏใน Java เวอร์ชันถัดไป การสนับสนุนตัวอักษรสตริงดิบช่วยให้คุณสามารถทำงานกับข้อมูลสตริงโดยไม่คำนึงถึงภาษา ทำให้ไม่จำเป็นต้องมีการป้องกัน มีประโยชน์อย่างยิ่งในนิพจน์ทั่วไป ซึ่งมีการใช้แบ็กสแลชกันอย่างแพร่หลาย และใน Windows-path ซึ่งใช้แบ็กสแลชเป็นตัวคั่น นั่นคือเพื่อหลีกเลี่ยงโครงสร้างดังกล่าว: C:\\My\\Test\\Pack\\
โปรแกรมเมอร์ทุกคนมักประสบปัญหาในการทำงาน บางครั้งสิ่งเหล่านี้เกี่ยวข้องกับการขาดประสบการณ์ของนักพัฒนา แต่บางครั้งอาจเกี่ยวข้องกับความไม่สมบูรณ์ของเครื่องมือเอง Java เป็นภาษาที่ยอดเยี่ยม แต่ก็ยังห่างไกลจากความสมบูรณ์แบบ บางทีคุณอาจพบบางสิ่งใน Java แล้วและรู้ว่าคุณต้องการเปลี่ยนแปลงอะไรใน "เครื่องมือ" (ภาษา) ของคุณ? แบ่งปันในความคิดเห็น!

ข้อสรุป

ไม่มีการปฏิวัติใน Java 12 อย่างไรก็ตามไม่มีใครวางแผนมัน อย่างไรก็ตาม นวัตกรรมจำนวนหนึ่งมุ่งเป้าไปที่การเพิ่มประสิทธิภาพการทำงานของแอพพลิเคชั่นและเร่งการทำงาน ซึ่งถือเป็นข่าวดี อย่างไรก็ตาม IDEA รองรับ JDK 12 อยู่แล้ว ดังนั้นคุณจึงสามารถลองใช้ความสามารถของมันได้ แน่นอนว่าการอัปเดตบางอย่างส่งผลโดยตรงต่อผู้เริ่มต้น แม้ว่าแม้แต่ผู้ที่เพิ่งเริ่มเรียนรู้ JavaRush ก็สามารถเล่นกับสวิตช์ใหม่ได้ (หลังจากตั้งค่าสถานะ --enable-preview แล้ว)
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION