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

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

Java SE 15 จัดเป็นรุ่นสนับสนุนทั่วไป และจะยังคงรับการอัปเดตต่อไปจนกว่าจะมีรุ่นถัดไป สาขาการสนับสนุนระยะยาว (LTS) ควรเป็น Java SE 11 ซึ่งจะได้รับการอัปเดตต่อไปจนถึงปี 2026 Java 8 สาขา LTS ก่อนหน้าจะได้รับการสนับสนุนจนถึงเดือนธันวาคม 2020 LTS รุ่นถัดไปมีกำหนดในเดือนกันยายน 2021 เราขอเตือนคุณว่าตั้งแต่การเปิดตัว Java 10 เป็นต้นไป โปรเจ็กต์ได้เปลี่ยนไปใช้กระบวนการพัฒนาใหม่ ซึ่งหมายถึงวงจรที่สั้นลงสำหรับการก่อตัวของรีลีสใหม่ ขณะนี้ฟังก์ชันการทำงานใหม่ได้รับการพัฒนาในสาขาหลักที่ได้รับการอัปเดตอย่างต่อเนื่อง ซึ่งรวมถึงการเปลี่ยนแปลงสำเร็จรูปและสาขาที่จะแตกแขนงทุก ๆ หกเดือนเพื่อรักษาเสถียรภาพของการออกใหม่

ของ นวัตกรรม 15 Java หนึ่งสามารถ เครื่องหมาย:

  • บิวท์อิน รองรับอัลกอริธึมการสร้างลายเซ็นดิจิทัล 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

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