การเปิดตัว Java SE 20

หลังจากหกเดือนของการพัฒนา Oracle ได้เปิดตัวแพลตฟอร์ม Java SE 20 (Java Platform, Standard Edition 20) ซึ่งใช้โครงการโอเพ่นซอร์ส OpenJDK เป็นการดำเนินการอ้างอิง ยกเว้นการลบฟีเจอร์ที่เลิกใช้แล้ว Java SE 20 จะรักษาความเข้ากันได้แบบย้อนหลังกับเวอร์ชันก่อนหน้าของแพลตฟอร์ม Java ซึ่งโปรเจ็กต์ Java ที่เขียนไว้ก่อนหน้านี้ส่วนใหญ่จะยังคงทำงานโดยไม่มีการแก้ไขเมื่อเรียกใช้ภายใต้เวอร์ชันใหม่ รุ่นที่ติดตั้งได้ของ Java SE 20 (JDK, JRE และ Server JRE) เตรียมไว้สำหรับ Linux (x86_64, AArch64), Windows (x86_64) และ macOS (x86_64, AArch64) การพัฒนาโดยโครงการ OpenJDK การใช้งานอ้างอิง Java 20 เป็นโอเพ่นซอร์สอย่างสมบูรณ์ภายใต้สิทธิ์ใช้งาน GPLv2 พร้อมข้อยกเว้น GNU ClassPath เพื่ออนุญาตการเชื่อมโยงแบบไดนามิกไปยังผลิตภัณฑ์เชิงพาณิชย์

Java SE 20 ถูกจัดประเภทเป็นรีลีสสนับสนุนปกติ โดยมีการอัพเดตที่จะออกก่อนรีลีสถัดไป สาขา Long Term Support (LTS) ควรเป็น Java SE 17 ซึ่งจะได้รับการอัปเดตจนถึงปี 2029 จำได้ว่าเริ่มต้นด้วยการเปิดตัว Java 10 โปรเจ็กต์เปลี่ยนไปใช้กระบวนการพัฒนาใหม่ ซึ่งหมายถึงวงจรที่สั้นลงสำหรับการก่อตัวของรีลีสใหม่ ขณะนี้ฟังก์ชันการทำงานใหม่ได้รับการพัฒนาในสาขาหลักที่อัปเดตอย่างต่อเนื่อง ซึ่งรวมเอาการเปลี่ยนแปลงที่เสร็จสมบูรณ์แล้วและสาขาที่แยกย่อยทุก ๆ หกเดือนเพื่อให้การเผยแพร่ใหม่มีความเสถียร

คุณสมบัติใหม่ใน Java 20 รวมถึง:

  • มีการเสนอการสนับสนุนเบื้องต้นสำหรับค่าที่กำหนดขอบเขต ซึ่งช่วยให้สามารถแบ่งปันข้อมูลที่ไม่เปลี่ยนรูปในเธรดและแลกเปลี่ยนข้อมูลระหว่างเธรดย่อยได้อย่างมีประสิทธิภาพ (ค่าจะสืบทอดมา) Scoped Values ​​กำลังได้รับการพัฒนาเพื่อแทนที่กลไกตัวแปรแบบเธรดโลคัล และมีประสิทธิภาพมากขึ้นเมื่อใช้เธรดเสมือนจำนวนมาก (หลายพันและหลายล้านเธรด) ข้อแตกต่างที่สำคัญระหว่าง Scoped Values ​​และตัวแปร thread-local คือตัวแปรแรกจะถูกเขียนเพียงครั้งเดียว ไม่สามารถเปลี่ยนแปลงได้ในภายหลัง และยังคงใช้ได้เฉพาะในช่วงระยะเวลาของการดำเนินการเธรดเท่านั้น เซิร์ฟเวอร์คลาส { ScopedValue คงที่สุดท้าย CURRENT_USER = ScopedValue ใหม่ (); โมฆะให้บริการ (คำขอการร้องขอการตอบกลับ) { var level = (request.isAuthorized()? ADMIN: GUEST); ผู้ใช้ var = ผู้ใช้ใหม่ (ระดับ); ScopedValue.where(CURRENT_USER, user) .run(() -> Application.handle(ร้องขอ, ตอบกลับ)); } } class DatabaseManager { DBConnection open() { ผู้ใช้ var = Server.CURRENT_USER.get(); ถ้า (!user.canOpen()) โยนใหม่ InvalidUserException(); ส่งคืน DBConnection ใหม่ (...); } }
  • มีการเพิ่มการใช้งานรูปแบบบันทึกชั่วคราวครั้งที่สอง ซึ่งขยายความสามารถในการจับคู่รูปแบบ Java 16 เพื่อแยกวิเคราะห์ค่าของคลาสของประเภทบันทึก ตัวอย่างเช่น: บันทึก Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = px(); int y = พาย (); System.out.println(x+y); } }
  • มีการเพิ่มการดำเนินการเบื้องต้นครั้งที่สี่ของการจับคู่รูปแบบในนิพจน์สวิตช์ ซึ่งอนุญาตให้ใช้เทมเพลตที่ยืดหยุ่นในป้ายชื่อเคสที่ครอบคลุมชุดของค่าต่างๆ ในคราวเดียว ซึ่งก่อนหน้านี้มีการใช้คำสั่ง if...else ที่ยุ่งยาก รูปแบบสตริงคงที่ formatterPatternSwitch (Object obj) { return switch (obj) { case Integer i -> String.format ("int %d", i); กรณี Long l -> String.format("long %d", l); กรณี Double d -> String.format("double %f", d); กรณี String s -> String.format("String %s", s); ค่าเริ่มต้น -> o.toString (); }; }
  • มีการเพิ่มการใช้งานเบื้องต้นครั้งที่สองของ FFM (Foreign Function & Memory) API ซึ่งช่วยให้คุณสามารถจัดระเบียบการโต้ตอบของโปรแกรม Java ด้วยโค้ดและข้อมูลภายนอกผ่านการเรียกใช้ฟังก์ชันจากไลบรารีภายนอกและการเข้าถึงหน่วยความจำภายนอก JVM
  • เพิ่มการใช้งานเบื้องต้นครั้งที่สองของเธรดเสมือนซึ่งเป็นเธรดที่มีน้ำหนักเบาซึ่งช่วยลดความยุ่งยากในการเขียนและบำรุงรักษาแอปพลิเคชันแบบมัลติเธรดที่มีประสิทธิภาพสูง
  • มีการเพิ่มตัวแปรที่สองของ API โครงสร้างแบบขนานเชิงทดลอง เพื่อลดความซับซ้อนของการพัฒนาแอปพลิเคชันแบบมัลติเธรดโดยปฏิบัติต่องานหลายอย่างที่ทำงานบนเธรดที่แตกต่างกันเป็นหน่วยเดียว
  • เพิ่มการใช้งาน Vector API เบื้องต้นครั้งที่ห้า โดยมีฟังก์ชันสำหรับการคำนวณเวกเตอร์ที่ดำเนินการโดยใช้คำสั่งเวกเตอร์บนโปรเซสเซอร์ x86_64 และ AArch64 และอนุญาตให้คุณใช้การดำเนินการกับค่าหลายค่าพร้อมกัน (SIMD) ไม่เหมือนกับความสามารถที่มีให้ในคอมไพเลอร์ HotSpot JIT สำหรับการทำเวกเตอร์อัตโนมัติของการดำเนินการสเกลาร์ API ใหม่ทำให้สามารถควบคุมเวกเตอร์ได้อย่างชัดเจนสำหรับการประมวลผลข้อมูลแบบขนาน

ที่มา: opennet.ru

เพิ่มความคิดเห็น