หลังจากหกเดือนของการพัฒนา Oracle
Java SE 15 จัดเป็นรุ่นสนับสนุนทั่วไป และจะยังคงรับการอัปเดตต่อไปจนกว่าจะมีรุ่นถัดไป สาขาการสนับสนุนระยะยาว (LTS) ควรเป็น Java SE 11 ซึ่งจะได้รับการอัปเดตต่อไปจนถึงปี 2026 Java 8 สาขา LTS ก่อนหน้าจะได้รับการสนับสนุนจนถึงเดือนธันวาคม 2020 LTS รุ่นถัดไปมีกำหนดในเดือนกันยายน 2021 เราขอเตือนคุณว่าตั้งแต่การเปิดตัว Java 10 เป็นต้นไป โปรเจ็กต์ได้เปลี่ยนไปใช้กระบวนการพัฒนาใหม่ ซึ่งหมายถึงวงจรที่สั้นลงสำหรับการก่อตัวของรีลีสใหม่ ขณะนี้ฟังก์ชันการทำงานใหม่ได้รับการพัฒนาในสาขาหลักที่ได้รับการอัปเดตอย่างต่อเนื่อง ซึ่งรวมถึงการเปลี่ยนแปลงสำเร็จรูปและสาขาที่จะแตกแขนงทุก ๆ หกเดือนเพื่อรักษาเสถียรภาพของการออกใหม่
ของ
-
บิวท์อิน รองรับอัลกอริธึมการสร้างลายเซ็นดิจิทัล EdDSA (Edwards-Curve Digital Signature Algorithm)RFC 8032 - การใช้งาน EdDSA ที่เสนอไม่ได้ขึ้นอยู่กับแพลตฟอร์มฮาร์ดแวร์ ได้รับการปกป้องจากการโจมตีช่องทางด้านข้าง (รับประกันเวลาคงที่ของการคำนวณทั้งหมด) และประสิทธิภาพเร็วกว่าการใช้งาน ECDSA ที่มีอยู่ซึ่งเขียนด้วยภาษา C โดยมีระดับการป้องกันเท่ากัน ตัวอย่างเช่น EdDSA ที่ใช้เส้นโค้งวงรีที่มีคีย์ 126 บิตจะแสดงประสิทธิภาพที่คล้ายคลึงกับ ECDSA ที่มีเส้นโค้งวงรี secp256r1 และคีย์ 128 บิต -
เพิ่ม การสนับสนุนการทดลองสำหรับคลาสและอินเทอร์เฟซที่ปิดผนึก ซึ่งคลาสและอินเทอร์เฟซอื่นไม่สามารถใช้เพื่อสืบทอด ขยาย หรือแทนที่การใช้งาน คลาสที่ปิดผนึกยังจัดให้มีวิธีการประกาศที่ชัดเจนมากขึ้นในการจำกัดการใช้ซูเปอร์คลาสมากกว่าตัวแก้ไขการเข้าถึง โดยยึดตามรายการคลาสย่อยที่อนุญาตให้ขยายอย่างชัดเจนแพ็คเกจ com.example.geometry;
รูปร่างชั้นปิดผนึกสาธารณะ
อนุญาตให้ com.example.polar.Circle,
com.example.quad.สี่เหลี่ยมผืนผ้า
com.example.quad.simple.Square {…} -
เพิ่ม รองรับคลาสที่ซ่อนอยู่ซึ่งไม่สามารถใช้โค้ดไบต์ของคลาสอื่นได้โดยตรง วัตถุประสงค์หลักของคลาสที่ซ่อนอยู่คือเพื่อใช้ในเฟรมเวิร์กที่สร้างคลาสแบบไดนามิกขณะรันไทม์และใช้คลาสทางอ้อมผ่านการสะท้อน - คลาสดังกล่าวมักจะมีวงจรชีวิตที่จำกัด ดังนั้นการคงไว้ซึ่งการเข้าถึงจากคลาสที่สร้างแบบคงที่นั้นจึงไม่สมเหตุสมผล และจะนำไปสู่การใช้หน่วยความจำที่เพิ่มขึ้นเท่านั้น คลาสที่ซ่อนไว้ยังช่วยลดความจำเป็นในการใช้ API ที่ไม่เป็นไปตามมาตรฐาน sun.misc.Unsafe::defineAnonymousClass ซึ่งมีกำหนดนำออกในอนาคต - รถเก็บขยะ ZGC (Z Garbage Collector) ได้รับความเสถียรและได้รับการยอมรับว่าพร้อมใช้งานอย่างแพร่หลาย ZGC ทำงานในโหมดพาสซีฟ ลดเวลาแฝงเนื่องจากการรวบรวมขยะให้มากที่สุด (เวลาหยุดทำงานเมื่อใช้ ZGC ไม่เกิน 10 มิลลิวินาที) และสามารถทำงานกับฮีปทั้งขนาดเล็กและขนาดใหญ่ ตั้งแต่ขนาดหลายร้อยเมกะไบต์ไปจนถึงหลายเทราไบต์
- มีความเสถียรและพบว่าพร้อมสำหรับการใช้งานทั่วไป
คนเก็บขยะShenandoah การทำงานโดยมีการหยุดชั่วคราวน้อยที่สุด (Low-Pause-Time Garbage Collector) Shenandoah ได้รับการพัฒนาโดย Red Hat และมีความโดดเด่นในการใช้อัลกอริธึมที่ช่วยลดเวลาหยุดทำงานในระหว่างการรวบรวมขยะโดยการเรียกใช้การล้างข้อมูลควบคู่ไปกับการทำงานของแอปพลิเคชัน Java ขนาดของความล่าช้าที่ตัวรวบรวมขยะนำมาใช้นั้นสามารถคาดเดาได้และไม่ขึ้นอยู่กับขนาดของฮีป เช่น สำหรับฮีป 200 MB และ 200 GB ความล่าช้าจะเท่ากัน (อย่าออกมา เกิน 50 ms และโดยปกติภายใน 10 ms) - การสนับสนุนมีเสถียรภาพและนำมาใช้ในภาษา
บล็อกข้อความ - รูปแบบใหม่ของตัวอักษรสตริงที่ช่วยให้คุณสามารถรวมข้อมูลข้อความหลายบรรทัดในซอร์สโค้ดโดยไม่ต้องใช้อักขระหลีกและรักษาการจัดรูปแบบข้อความต้นฉบับไว้ในบล็อก บล็อกนี้ล้อมรอบด้วยเครื่องหมายคำพูดคู่สามอันตัวอย่างเช่นแทนที่จะเป็นรหัส
สตริง html = " -
"\n\t" + " -
"\n\t\t" + " \"Java 1 มาแล้ว!\" -
"\n\t" + " -
"\n" + " -คุณสามารถระบุ:
สตริง html = """
»จาวา 1\
อยู่ที่นี่!
- -
ออกแบบใหม่ DatagramSocket API ดั้งเดิม การใช้งานแบบเก่าของ java.net.DatagramSocket และ java.net.MulticastSocket ถูกแทนที่ด้วยการใช้งานสมัยใหม่ที่ง่ายต่อการดีบั๊กและบำรุงรักษา และยังเข้ากันได้กับสตรีมเสมือนที่พัฒนาภายในโปรเจ็กต์อีกด้วยกี่ - ในกรณีที่อาจเข้ากันไม่ได้กับโค้ดที่มีอยู่ การใช้งานแบบเก่าจะไม่ถูกลบออกและสามารถเปิดใช้งานได้โดยใช้ตัวเลือก jdk.net.usePlainDatagramSocketImpl - เสนอให้มีการดำเนินการทดลองครั้งที่สอง
การจับคู่รูปแบบ ในตัวดำเนินการ "instanceof" ซึ่งช่วยให้คุณกำหนดตัวแปรท้องถิ่นได้ทันทีเพื่อเข้าถึงค่าที่เลือก ตัวอย่างเช่น คุณสามารถเขียน “if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” ได้ทันทีโดยไม่ต้องกำหนด “String s = (String) obj” อย่างชัดเจนมันเป็น:
ถ้า (obj อินสแตนซ์ของกลุ่ม) {
กลุ่ม กลุ่ม = (กลุ่ม)obj;
รายการ var = group.getEntries();
}ตอนนี้คุณสามารถทำได้โดยไม่มีคำจำกัดความ "Group group = (Group) obj":
ถ้า (obj อินสแตนซ์ของกลุ่มกลุ่ม) {
รายการ var = group.getEntries();
} -
เสนอ การทดลองใช้งานคำหลักครั้งที่สอง "ระเบียน " ซึ่งมีรูปแบบที่กะทัดรัดสำหรับการกำหนดคลาส ซึ่งช่วยให้คุณหลีกเลี่ยงการกำหนดวิธีการระดับต่ำต่างๆ อย่างชัดเจน เช่น เท่ากับ(), hashCode() และ toString() ในกรณีที่ข้อมูลถูกจัดเก็บเฉพาะในฟิลด์ที่พฤติกรรมไม่เปลี่ยนแปลง เมื่อคลาสใช้งานมาตรฐานของเมธอดเท่ากับ(), hashCode() และ toString() ก็สามารถทำได้โดยไม่ต้องมีคำจำกัดความที่ชัดเจน:บันทึกสาธารณะ ธุรกรรมทางธนาคาร (วันที่ LocalDate,
จำนวนสองเท่า
คำอธิบายสตริง) {}การประกาศนี้จะเพิ่มการใช้งานเมธอดเท่ากับ(), hashCode() และ toString() โดยอัตโนมัติ นอกเหนือจากเมธอด Constructor และ Getter
-
เสนอ การแสดงตัวอย่างครั้งที่สองของ Foreign-Memory Access API ช่วยให้แอปพลิเคชัน Java สามารถเข้าถึงขอบเขตหน่วยความจำภายนอกฮีป Java ได้อย่างปลอดภัยและมีประสิทธิภาพ โดยการจัดการ MemorySegment, MemoryAddress และ MemoryLayout ใหม่ -
พิการ และเลิกใช้เทคนิคการเพิ่มประสิทธิภาพ Biased Locking ที่ใช้ใน HotSpot JVM เพื่อลดค่าใช้จ่ายในการล็อก เทคนิคนี้ได้สูญเสียความเกี่ยวข้องกับระบบที่มีคำสั่งแบบอะตอมมิกจาก CPU สมัยใหม่ และต้องใช้แรงงานมากเกินกว่าจะดูแลรักษาเนื่องจากความซับซ้อน -
ประกาศ กลไกที่ล้าสมัยการเปิดใช้งาน RMI ซึ่งจะถูกนำออกในรุ่นต่อๆ ไป มีข้อสังเกตว่าการเปิดใช้งาน RMI นั้นล้าสมัยและตกชั้นไปอยู่ในหมวดหมู่ของตัวเลือกใน Java 8 และแทบไม่เคยถูกนำมาใช้ในทางปฏิบัติสมัยใหม่ -
ลบแล้ว เอ็นจิ้นจาวาสคริปต์Nashorn ซึ่งเลิกใช้แล้วใน Java SE 11 -
ลบแล้ว พอร์ตสำหรับโปรเซสเซอร์ Solaris OS และ SPARC (Solaris/SPARC, Solaris/x64 และ Linux/SPARC) การนำพอร์ตเหล่านี้ออกจะช่วยให้ชุมชนสามารถเร่งการพัฒนาคุณสมบัติ OpenJDK ใหม่โดยไม่ต้องเสียเวลาในการบำรุงรักษาคุณสมบัติเฉพาะของ Solaris และ SPARC
ที่มา: opennet.ru