หลังจากพัฒนามาหกเดือน Oracle ได้เปิดตัว Java SE 27 (Java Platform, Standard Edition 27) ซึ่งใช้โครงการโอเพนซอร์ส OpenJDK เป็นแบบอ้างอิง ยกเว้นการลบคุณสมบัติบางอย่างที่เลิกใช้แล้ว Java SE 27 ยังคงรักษาความเข้ากันได้กับเวอร์ชันก่อนหน้าของแพลตฟอร์ม Java โครงการ Java ส่วนใหญ่ที่เขียนไว้ก่อนหน้านี้จะทำงานได้โดยไม่เปลี่ยนแปลงเมื่อใช้งานในเวอร์ชันใหม่ มีไฟล์ติดตั้งพร้อมใช้งานของ Java SE 27 (JDK, JRE และ Server JRE) ไว้ให้แล้ว Linux (x86_64, AArch64) Windows (x86_64) และ macOS (x86_64, AArch64) การพัฒนาโดยโครงการ OpenJDK ทำให้ Java SE 27 เป็นซอฟต์แวร์อ้างอิงแบบโอเพนซอร์สอย่างสมบูรณ์ภายใต้ใบอนุญาต GPLv2 พร้อมด้วยข้อยกเว้น GNU ClassPath ซึ่งอนุญาตให้เชื่อมโยงแบบไดนามิกกับผลิตภัณฑ์เชิงพาณิชย์ได้
Java SE 27 จัดอยู่ในประเภทเวอร์ชันสนับสนุนปกติ โดยจะมีการอัปเดตออกมาเรื่อยๆ จนกว่าจะมีเวอร์ชันใหม่ออกมา ส่วนเวอร์ชันสนับสนุนระยะยาว (LTS) ควรจะเป็น Java SE 25, Java SE 21 หรือ Java SE 17 โดยจะมีการอัปเดตออกมาเรื่อยๆ จนถึงปี 2033, 2031 และ 2029 ตามลำดับ (โดยทั่วไปจะใช้งานได้จนถึงเดือนกันยายน ปี 2030, 2028 และ 2026) การสนับสนุนเพิ่มเติมสำหรับ Java SE 8 LTS จะดำเนินต่อไปจนถึงปี 2030 และสำหรับ Java SE 11 จนถึงปี 2032
การเปลี่ยนแปลงใน Java SE 27 (1, 2, 3, 4) ประกอบด้วย:
- โดยค่าเริ่มต้น สภาพแวดล้อมทั้งหมดจะใช้ตัวจัดการขยะแบบ G1 (Garbage-First) ซึ่งเคยใช้กับระบบเซิร์ฟเวอร์มาก่อน G1 ได้รับการปรับให้เหมาะสมสำหรับการใช้งานบนระบบมัลติโปรเซสเซอร์ที่มีความจุหน่วยความจำขนาดใหญ่ และเพื่อสร้างสมดุลระหว่างความหน่วงที่คาดการณ์ได้กับปริมาณงานสูง ในระหว่างการทำงาน G1 จะแบ่งหน่วยความจำออกเป็นส่วนเล็กๆ หลายส่วน และให้ความสำคัญกับส่วนที่มีวัตถุที่ไม่ได้ใช้งานมากกว่าและข้อมูลที่มีการเข้าถึงน้อยกว่า
- โดยค่าเริ่มต้น JVM ของ HotSpot ใช้ส่วนหัวของอ็อบเจ็กต์แบบกะทัดรัด ในระบบ 64 บิต ขนาดของส่วนหัวลดลงจาก 96 บิตเหลือ 64 บิต ซึ่งช่วยลดการใช้หน่วยความจำและเพิ่มโอกาสที่ข้อมูลจะเข้าสู่แคชของโปรเซสเซอร์ ในการทดสอบ SPECjbb2015 การใช้หน่วยความจำลดลง 22% ภาระการทำงานของ CPU ลดลง 8% และจำนวนการดำเนินการเก็บขยะลดลง 15% เวลาในการทดสอบสำหรับตัวแยกวิเคราะห์ JSON ลดลง 10%
- การใช้งาน TLS 1.3 เพิ่มการรองรับรูปแบบการตกลงคีย์แบบไฮบริดที่ผสมผสานอัลกอริทึม ML-KEM (CRYSTALS-Kyber) ที่ทนทานต่อควอนตัมเข้ากับอัลกอริทึมเส้นโค้งวงรี ECDHE แบบคลาสสิก ได้แก่ X25519MLKEM768 (ECDHE ที่ใช้เส้นโค้ง X25519 + ML-KEM-768), SecP256r1MLKEM76 (ECDHE ที่ใช้เส้นโค้ง secp256r1 + ML-KEM-768) และ SecP384r1MLKEM1024 (ECDHE ที่ใช้เส้นโค้ง secp384r1 + ML-KEM-1024) ใน API javax.netSSL ระบบเหล่านี้เปิดใช้งานโดยค่าเริ่มต้นและไม่จำเป็นต้องเปลี่ยนแปลงแอปพลิเคชันใดๆ เพื่อใช้งาน
- JDK Flight Recorder (JFR) ซึ่งเป็นเครื่องมือที่ใช้สำหรับการตรวจสอบประสิทธิภาพ การวิเคราะห์โปรไฟล์ และการวินิจฉัยปัญหา ตอนนี้รองรับการกรองข้อมูลอาร์กิวเมนต์บรรทัดคำสั่ง ค่าเริ่มต้นของตัวแปรสภาพแวดล้อม และคุณสมบัติของระบบในข้อมูลการวินิจฉัยที่บันทึกไว้ การเปลี่ยนแปลงนี้ช่วยป้องกันการรั่วไหลของข้อมูลที่ละเอียดอ่อนซึ่งประมวลผลโดยกระบวนการวิเคราะห์โปรไฟล์ เช่น โทเค็นการอนุญาตและคีย์การเข้าถึง API ที่ส่งผ่านตัวแปรสภาพแวดล้อม
- ได้มีการนำ API Lazy Constants เวอร์ชันพรีวิวที่สามมาใช้งานแล้ว เพื่อใช้กับอ็อบเจ็กต์ที่มีข้อมูลที่ไม่สามารถเปลี่ยนแปลงได้ และถือว่าเป็นค่าคงที่ใน JVM มีการปรับปรุงประสิทธิภาพคล้ายกับที่ใช้กับฟิลด์ที่มีคีย์เวิร์ด "final" แต่ต่างจาก "final" ตรงที่ API ใหม่นี้จะแยกการสร้างค่าคงที่ออกจากการเริ่มต้นค่า ทำให้มั่นใจได้ว่าค่าหนึ่งๆ สามารถเริ่มต้นได้เพียงครั้งเดียว ลดเวลาในการเริ่มต้นโปรแกรม และช่วยให้สามารถใช้การปรับปรุงประสิทธิภาพการพับค่าคงที่ ซึ่งก่อนหน้านี้ใช้เฉพาะในโค้ดภายในของ JDK ในโค้ดของผู้ใช้ได้ class Application { // ก่อนหน้านี้: // static final UserService USERS = new UserService(); // ตอนนี้: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- กลไกการจับคู่รูปแบบได้นำเสนอความสามารถในการใช้ชนิดข้อมูลพื้นฐาน (int, byte, char และชนิดข้อมูลพื้นฐานอื่นๆ ที่ไม่ใช่ประเภทอ็อบเจ็กต์) ในรูปแบบต่างๆ ในตัวดำเนินการ instanceof และในบล็อก switch ในเวอร์ชันที่ห้า switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; case int i -> "unknown status: " + i; } if (i instanceof byte b) { … b … }
- ร่างฉบับที่เจ็ดของ Structured Concurrency API ซึ่งช่วยลดความซับซ้อนในการพัฒนาแอปพลิเคชันแบบมัลติเธรดโดยการจัดการงานหลายงานที่ทำงานบนเธรดต่างๆ เป็นหน่วยเดียว ได้ถูกเผยแพร่เพื่อทดสอบแล้ว
- การทดสอบใช้งาน Vector API ครั้งที่สิบสองได้เสร็จสมบูรณ์แล้ว API นี้มีฟังก์ชันสำหรับการคำนวณเวกเตอร์โดยใช้คำสั่งเวกเตอร์ของโปรเซสเซอร์ x86_64 และ AArch64 และอนุญาตให้ดำเนินการพร้อมกันกับหลายค่า (SIMD) ซึ่งแตกต่างจากการแปลงค่าสเกลาร์เป็นเวกเตอร์โดยอัตโนมัติของคอมไพเลอร์ HotSpot JIT ที่อนุญาตให้ควบคุมการแปลงค่าเป็นเวกเตอร์สำหรับการประมวลผลข้อมูลแบบขนานได้อย่างชัดเจน
- ขณะนี้มีร่าง API ฉบับที่สามสำหรับการเข้ารหัสและถอดรหัสวัตถุที่มีคีย์เข้ารหัส ใบรับรอง และรายการเพิกถอนใบรับรองโดยใช้รูปแบบ PEM (Pivacy-Enhanced Mail) แล้ว
นอกจากนี้ เรายินดีที่จะประกาศการอัปเดตแพลตฟอร์ม JavaFX 27 สำหรับการสร้างแอปพลิเคชันส่วนติดต่อผู้ใช้แบบกราฟิก และคาดว่าจะมีการเปิดตัว GraalVM 27 เครื่องเสมือนอเนกประสงค์ ซึ่งรองรับการเรียกใช้แอปพลิเคชันใน JavaScript (Node.js), Python, Ruby, R, ภาษา JVM ใดๆ (Java, Scala, Clojure, Kotlin) และภาษาที่สามารถสร้างบิตโค้ด LLVM ได้ (C, C++, Rust) ในอีกไม่กี่ชั่วโมงข้างหน้านี้ด้วย
ที่มา: opennet.ru
