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

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

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

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

  • การเข้ารหัสเริ่มต้นคือ UTF-8 Java API ที่ประมวลผลข้อมูลข้อความตามการเข้ารหัสอักขระจะใช้ UTF-8 เป็นค่าเริ่มต้นในทุกแพลตฟอร์ม โดยไม่คำนึงถึงการตั้งค่าระบบและการตั้งค่าภาษา หากต้องการกลับไปใช้ลักษณะการทำงานแบบเก่า โดยเลือกการเข้ารหัสตามภาษาของระบบ คุณสามารถใช้ตัวเลือก "-Dfile.encoding=COMPAT"
  • แพ็คเกจนี้รวมแพ็คเกจ com.sun.net.httpserver ซึ่งรวมถึงยูทิลิตี้ jwebserver และไลบรารี API พร้อมการใช้งานเซิร์ฟเวอร์ http อย่างง่ายสำหรับการให้บริการเนื้อหาคงที่ (ไม่รองรับ CGI และตัวจัดการที่คล้ายเซิร์ฟเล็ต) เซิร์ฟเวอร์ HTTP ในตัวไม่ได้รับการปรับให้เหมาะสมสำหรับปริมาณงาน และไม่รองรับการควบคุมการเข้าถึงและการตรวจสอบสิทธิ์ เนื่องจากมีจุดมุ่งหมายเพื่อใช้ในกระบวนการพัฒนาสำหรับการสร้างต้นแบบ การดีบัก และการทดสอบโครงการเป็นหลัก
  • JavaDoc ให้การสนับสนุนแท็ก "@snippet" เพื่อฝังตัวอย่างการทำงานและส่วนย่อยโค้ดลงในเอกสารประกอบ API ซึ่งคุณสามารถใช้เครื่องมือตรวจสอบความถูกต้อง การเน้นไวยากรณ์ และการผสานรวม IDE
  • การใช้งาน java.lang.reflect API (Core Reflection) ที่ออกแบบมาเพื่อรับข้อมูลเกี่ยวกับเมธอด ฟิลด์ และตัวสร้างคลาส รวมถึงการเข้าถึงโครงสร้างภายในของคลาส ได้รับการออกแบบใหม่ java.lang.reflect API เองยังคงไม่เปลี่ยนแปลง แต่ขณะนี้ถูกนำไปใช้โดยใช้ตัวจัดการเมธอดที่โมดูล java.lang.invoid มอบให้ แทนที่จะใช้ตัวสร้างโค้ดไบต์ การเปลี่ยนแปลงนี้ทำให้เราสามารถรวมการใช้งาน java.lang.reflect และ java.lang.inrigg เข้าด้วยกัน และทำให้การบำรุงรักษาง่ายขึ้น
  • มีการเสนอการแสดงตัวอย่างครั้งที่สามของ Vector API โดยมีฟังก์ชันสำหรับการคำนวณเวกเตอร์ที่ดำเนินการโดยใช้คำสั่งเวกเตอร์บนโปรเซสเซอร์ x86_64 และ AArch64 และอนุญาตให้ดำเนินการพร้อมกันกับหลายค่า (SIMD) ต่างจากความสามารถที่มีในคอมไพเลอร์ HotSpot JIT สำหรับการทำเวคเตอร์อัตโนมัติของการดำเนินการสเกลาร์ API ใหม่ทำให้สามารถควบคุมการทำเวคเตอร์สำหรับการประมวลผลข้อมูลแบบขนานได้อย่างชัดเจน
  • เพิ่มอินเทอร์เฟซ SPI (อินเทอร์เฟซของผู้ให้บริการ) สำหรับการแก้ไขชื่อโฮสต์และที่อยู่ IP ช่วยให้คุณสามารถใช้ตัวแก้ไขอื่นใน java.net.InetAddress ที่ไม่เชื่อมโยงกับตัวจัดการที่นำเสนอโดยระบบปฏิบัติการ
  • มีการแสดงตัวอย่างที่สองของ Foreign Function & Memory API ซึ่งช่วยให้แอปพลิเคชันโต้ตอบกับโค้ดและข้อมูลนอกรันไทม์ Java ได้ API ใหม่ช่วยให้คุณเรียกใช้ฟังก์ชันที่ไม่ใช่ JVM ได้อย่างมีประสิทธิภาพ และเข้าถึงหน่วยความจำที่ไม่ได้จัดการโดย JVM ตัวอย่างเช่น คุณสามารถเรียกใช้ฟังก์ชันจากไลบรารีที่แบ่งใช้ภายนอกและเข้าถึงข้อมูลกระบวนการได้โดยไม่ต้องใช้ JNI
  • มีการเพิ่มการใช้งานการจับคู่รูปแบบการทดลองครั้งที่สองในนิพจน์ "สวิตช์" ทำให้สามารถใช้รูปแบบที่ยืดหยุ่นในป้ายกำกับ "กรณี" แทนที่จะเป็นค่าที่แน่นอน โดยครอบคลุมชุดของค่าในคราวเดียว ซึ่งก่อนหน้านี้จำเป็นต้องใช้ กลุ่มสำนวนที่ยุ่งยากของสำนวน "if...else" วัตถุ o = 123L; รูปแบบสตริง = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); ค่าเริ่มต้น -> o.toString(); };
  • กลไกการสรุปและวิธีการที่เกี่ยวข้อง เช่น Object.finalize(), Enum.finalize(), Runtime.runFinalization() และ System.runFinalization() เลิกใช้แล้วและจะถูกปิดใช้งานในรุ่นต่อๆ ไป
  • ตัวรวบรวมขยะ ZGC (Z Garbage Collector), SerialGC และ ParallelGC รองรับการขจัดข้อมูลซ้ำซ้อนของแถว

ที่มา: opennet.ru

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