JavaRush /จาวาบล็อก /Random-TH /Java 14: มีอะไรใหม่?

Java 14: มีอะไรใหม่?

เผยแพร่ในกลุ่ม
ปัญหาของโลกก็คือปัญหาของโลก และ Java ใหม่ก็เป็นไปตามกำหนดเวลา นั่นคือทุกๆ หกเดือน Java 14 เวอร์ชันวางจำหน่ายเปิดตัวเมื่อวันที่ 17 มีนาคม และนำเสนอนวัตกรรมที่น่าสนใจหลายประการสำหรับภาษาที่มุ่งเป้าไปที่นักพัฒนา Java 14: มีอะไรใหม่?  - 1หนึ่งในนั้นคือการสนับสนุนเชิงทดลองสำหรับ คีย์เวิร์ดของเรกคอร์ดการสนับสนุนการจับคู่รูปแบบในตัวดำเนินการ " instanceof " NullPointerExceptionsที่ใช้งานง่ายยิ่งขึ้นขยาย "การแสดงตัวอย่าง" ของบล็อกข้อความสวิตช์เริ่มต้นที่อัปเดต และอื่นๆ อีกมากมาย เราขอเตือนคุณว่านวัตกรรมทั้งหมดใน Java เริ่มต้นด้วยข้อเสนอส่วนขยาย ( JEP, Java Enhancement Proposals ) นักพัฒนาเสนอการเปลี่ยนแปลง โดยจะได้รับการตรวจสอบโดยผู้ปกครอง Java “อย่างเป็นทางการ” จากนั้นการเปลี่ยนแปลงบางส่วนจะได้รับการยอมรับ หลังจากนั้นการเปลี่ยนแปลงเหล่านั้นก็จะกลายเป็นส่วนหนึ่งของ JDK และตอนนี้ - เกี่ยวกับทุกสิ่งตามลำดับ

JEP 359: บันทึก

Records หรือที่รู้จักกันในชื่อ Records นั้นพร้อมใช้งานสำหรับ JDK 14 ในโหมดแสดงตัวอย่าง และนี่คือสิ่งใหม่สำหรับ Java อันที่จริง เรามีรูปแบบใหม่ที่ได้รับการพัฒนาในระหว่าง โครงการ Valhallaต่อหน้า เรา บันทึกจะคล้ายกับการแจงนับและช่วยให้คุณลดความซับซ้อนของโค้ดได้ โดยพื้นฐานแล้ว พวกมันจะแทนที่คลาสที่มีสถานะแต่ไม่มีพฤติกรรม พูดง่ายๆ ก็คือ มีเขตข้อมูล แต่ไม่มีวิธีการ ในกรณีของคลาส บางครั้งเราต้องเขียนโค้ดซ้ำๆ จำนวนมากซึ่งไม่จำเป็นเสมอไป: ​​constructors, accessors, เท่ากับ(), hashCode(), toString()ฯลฯ เพื่อหลีกเลี่ยงโค้ดที่ซ้ำกันนี้ Java จึงวางแผน เพื่อใช้บันทึก นี่คือเวอร์ชันคลาสสิก:
final class Triangle {
 	public final int x;
public final int y;
public final int z;

    public Triangle(int x, int y, int z) {
         this.x = x;
         this.y = y;
    this.z = z;
    }
    // equals, hashCode, toString
ย้ายไปที่ Java 14 และใช้บันทึก:
public record Triangle(int x, int y, int z){}
นั่นคือทั้งหมดที่ โปรดทราบว่าขณะนี้การบันทึกมีอยู่ในรูปแบบแสดงตัวอย่าง ดังนั้นหากต้องการทดลองใช้งานจริง คุณต้องดาวน์โหลด jdk14 และป้อนคำสั่ง:
javac —enable-preview —release 14 Triangle.java
บันทึกคือคลาส แม้ว่าจะมีข้อจำกัดก็ตาม พวกเขาไม่สามารถขยายคลาสอื่นหรือประกาศฟิลด์ (ยกเว้นขั้นสุดท้ายส่วนตัวซึ่งสอดคล้องกับองค์ประกอบการประกาศสถานะ) บันทึกถือเป็นที่สิ้นสุดโดยปริยายและไม่สามารถถือเป็นนามธรรมได้ บันทึกแตกต่างจากคลาสปกติตรงที่ไม่สามารถแยก API ออกจากการเป็นตัวแทนได้ แต่การสูญเสียอิสรภาพได้รับการชดเชยด้วยความแม่นยำที่เพิ่มขึ้น ส่วนประกอบของบันทึกถือเป็นที่สิ้นสุดโดยปริยายเช่นกัน

JEP 305: การจับคู่รูปแบบสำหรับอินสแตนซ์ (ดูตัวอย่าง)

คุณลักษณะการจับคู่รูปแบบซึ่งเปิดตัวใน Java 14 ในหน้าตัวอย่าง ได้รับการออกแบบมาเพื่อรวมการตรวจสอบประเภทของออบเจ็กต์และการแปลง ใน อินสแตนซ์ ของตัวดำเนินการ กล่าวอีกนัยหนึ่ง ก่อน Java 14 จะต้องมีโค้ดต่อไปนี้:
Object object = Violin;

if (object instanceof Instrument) {
    Instrument instrument = (Instrument) object;
    System.out.println(instrument.getMaster());
}
อย่างที่คุณเห็น เราต้องส่งอ็อบเจ็กต์ไปยังคลาสที่เราต้องการใช้เมธอด ตอนนี้ Java 14 และคุณสมบัติการจับคู่รูปแบบที่เชื่อมต่อช่วยให้คุณสามารถลดโค้ดเป็นดังนี้:
Object object = Violin;

if (object instanceof Instrument instrument){
    System.out.println(instrument.getMaster());
}

JEP 343: เครื่องมือบรรจุภัณฑ์ (ตู้ฟัก)

JDK 8 มี เครื่องมือ javapackagerที่ออกแบบมาสำหรับ JavaFX อย่างไรก็ตาม หลังจากการแยก JavaFX ออกจาก Java ด้วยการเปิดตัว JDK 11 ทำให้ javapackager ยอดนิยมไม่สามารถใช้งานได้อีกต่อไป Javapackagerเป็นเครื่องมือบรรจุภัณฑ์ อนุญาตให้บรรจุแอปพลิเคชัน Java ในลักษณะที่สามารถติดตั้งได้เหมือนกับโปรแกรม "ปกติ" อื่น ๆ ทั้งหมด ตัวอย่างเช่น สร้างไฟล์ exe สำหรับผู้ใช้ Windows และเปิดแอปพลิเคชัน Java เหมือนมนุษย์ด้วยการดับเบิลคลิก แน่นอนว่าเครื่องมือดังกล่าวขาดไปอย่างมาก ดังนั้นJEP 343 จึง แนะนำเครื่องมือใหม่jpackageซึ่งรวมแอปพลิเคชัน Java ไว้ในแพ็คเกจเฉพาะแพลตฟอร์มที่มีการขึ้นต่อกันที่จำเป็นทั้งหมด รูปแบบแพ็คเกจที่รองรับสำหรับแพลตฟอร์มเฉพาะ:
  • Linux: deb และ rpm
  • macOS: pkg และ dmg
  • Windows: MSI และ EXE

JEP 345: การจัดสรรหน่วยความจำ NUMA-Aware สำหรับ G1

JEP 345 ทำหน้าที่สนับสนุน NUMA (การเข้าถึงหน่วยความจำที่ไม่สม่ำเสมอ) เท่านั้น สถาปัตยกรรมเหล่านี้เป็นสถาปัตยกรรมการเข้าถึงหน่วยความจำที่แตกต่างกัน ซึ่งเป็นวิธีการตั้งค่าคลัสเตอร์ไมโครโปรเซสเซอร์ในระบบมัลติโปรเซสเซอร์ซึ่งสามารถกระจายหน่วยความจำภายในเครื่องได้ โดยแต่ละคอร์ของโปรเซสเซอร์จะได้รับหน่วยความจำในตัวเครื่องจำนวนเล็กน้อย ในขณะที่คอร์อื่นๆ สามารถเข้าถึงได้ JEP 345 วางแผนที่จะติดตั้งเครื่องรวบรวมขยะ G1 ด้วยความสามารถในการใช้ประโยชน์จากสถาปัตยกรรมดังกล่าว แนวทางนี้ช่วยปรับปรุงประสิทธิภาพของเครื่องจักรที่ทรงพลังมาก

JEP 349: การสตรีมเหตุการณ์ JFR

Java Flight Recorder (JFR)เป็นส่วนหนึ่งของ OpenJDK แล้วและสามารถใช้งานได้ฟรี JDK 14 เพิ่ม API สำหรับการติดตามเหตุการณ์ JFR (JDK Flight Recorder) ได้ทันที โดยเฉพาะอย่างยิ่งสำหรับการจัดการตรวจสอบแอปพลิเคชันที่ใช้งานอยู่และไม่ได้ใช้งานอย่างต่อเนื่อง เหตุการณ์เดียวกันนี้จะถูกบันทึกเช่นเดียวกับตัวเลือกที่ไม่ใช่การสตรีม โดยมีค่าใช้จ่ายน้อยกว่า 1% วิธีนี้กิจกรรมต่างๆ จะถูกสตรีมในเวลาเดียวกันกับตัวเลือกที่ไม่ใช่การสตรีม อย่างไรก็ตาม JEP 349 ต้องไม่อนุญาตให้มีการโทรกลับแบบซิงโครนัสสำหรับผู้บริโภคที่เกี่ยวข้อง แม้แต่ข้อมูลจากบันทึกที่เก็บไว้ในหน่วยความจำระดับกลางก็ไม่ควรสามารถเข้าถึงได้ ในทางเทคนิคแล้ว แพ็กเกจ jdk.jfr.consumer ในโมดูล jdk.jfr จะถูกขยายด้วยฟังก์ชันการทำงานสำหรับการเข้าถึงเหตุการณ์แบบอะซิงโครนัส

JEP 352: บัฟเฟอร์ไบต์ที่แมปแบบไม่ลบเลือน

ดังที่เราทราบJava NIO (New IO) File APIมีมาตั้งแต่ JDK 1.4 และมีการเพิ่มประสิทธิภาพใหม่ที่เรียกว่า Path Path เป็นอินเทอร์เฟซที่แทนที่คลาส java.io.File เพื่อเป็นตัวแทนของไฟล์หรือไดเร็กทอรีเมื่อเราทำงานใน Java NIO JEP 352 ขยาย MappedByteBuffer เพื่อโหลดข้อมูลไฟล์บางส่วนลงในหน่วยความจำแบบไม่ลบเลือน (NVM) หน่วยความจำคอมพิวเตอร์นี้ ซึ่งข้อมูลจะไม่สูญหายแม้ว่าจะปิดเครื่องแล้ว (หรือมักเรียกว่าหน่วยความจำแบบอ่านอย่างเดียว) จะถูกใช้เพื่อจัดเก็บข้อมูลอย่างถาวร ข้อเสนอการปรับปรุง Java นี้จัดเตรียมโมดูลและคลาสใหม่สำหรับ JDK API: โมดูล jdk.nio.mapmode ซึ่งมีโหมดใหม่ (READ_ONLY_SYNC, WRITE_ONLY_SYNC) สำหรับการสร้างบัฟเฟอร์ไบต์ที่แมป (MappedByteBuffer) ที่อ้างอิงถึง NVM

JEP 358: NullPointerExceptions ที่เป็นประโยชน์

NullPointerExceptions จะ เป็นมิตรกับโปรแกรมเมอร์มากขึ้น ในแง่ที่ว่าคำอธิบายของข้อยกเว้นจะมีข้อมูลมากกว่าเมื่อก่อนมาก เนื่องจาก JVM ได้รับการสอนให้วิเคราะห์คำสั่งโค้ดไบต์ของโปรแกรมได้แม่นยำยิ่งขึ้น และสามารถระบุตัวแปรที่นำไปสู่ค่าศูนย์ได้ สมมติว่าเรามีรหัส:
a.getMessage().getUserInfo().getName()
ใน Java ล่าสุดใด ๆ เราจะได้รับบันทึกข้อผิดพลาดตามปกติซึ่งไม่ได้ตอบคำถามว่าใครเป็นโมฆะ:
Exception in thread "main" java.lang.NullPointerException
	at Main.main(Main.java:12)
และนี่คือสิ่งที่ Java 14 จะมอบให้คุณหากคุณตัดสินใจลองใช้ฟีเจอร์แสดงตัวอย่างนี้:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "UserInfo().getName()" because the return value of "Message().getUserInfo()" is null
	at Main.main(Main.java:12)
สายโซ่นี้เข้าใจได้ง่ายกว่ามากและช่วยให้คุณแก้ไขข้อผิดพลาดได้เร็วยิ่งขึ้น

JEP 361: สลับนิพจน์ (มาตรฐาน)

ตัวดำเนินการสวิตช์ที่อัปเดตมีให้ใช้งานใน Java 12 และ 13 ก่อนหน้า แต่เป็นคุณสมบัติการแสดงตัวอย่างเท่านั้น กล่าวคือ ไม่ได้เปิดใช้งานตามค่าเริ่มต้น ตอนนี้ใน JDK 14 ทุกอย่างทำงานนอกกรอบ Java 14 แนะนำรูปแบบใหม่ของบล็อกสวิตช์ที่เรียบง่ายพร้อมป้ายกำกับตัวพิมพ์ L -> ... แบบฟอร์มใหม่ทำให้โค้ดง่ายขึ้นในบางกรณี นี่คือตัวอย่างบางส่วน สมมติว่าเรามีแจงนับที่อธิบายวันในสัปดาห์ เราสามารถเขียนโค้ดคลาสสิก (ก่อน Java 14):
switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        break;
}
และนี่คือตัวเลือกที่ใช้ Java 14:
switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY                -> System.out.println(7);
    case THURSDAY, SATURDAY     -> System.out.println(8);
    case WEDNESDAY              -> System.out.println(9);
}
คุณยังสามารถเขียนบล็อกหลายบรรทัดและส่งกลับค่าด้วยคีย์เวิร์ด Yield ใหม่ได้:
int result = switch (s) {
    case "Working from Home" -> 1;
    case "Working from Office" -> 2;
    default    -> {
        System.out.println("Neither Home nor Office… Cafe? Car? Park?...");
        yield 0;
    }
};
มีสิ่งสำคัญอีกสองสามประการที่ต้องคำนึงถึงเมื่อใช้สวิตช์ใหม่ โดยเฉพาะอย่างยิ่งคุณต้องจำไว้ว่าตัวเลือกต่างๆ จะต้องครบถ้วนสมบูรณ์ นั่นคือสำหรับค่าที่เป็นไปได้ทั้งหมดจะต้องมีป้ายกำกับสวิตช์ที่เกี่ยวข้อง เนื่องจาก ตอนนี้ Yieldเป็นคีย์เวิร์ดแล้ว คลาสที่ชื่อ Yield จึงเป็นไปได้ใน Java 14 โดยทั่วไป หากคุณต้องการเรียนรู้วิธีใช้สวิตช์ที่อัปเดต ให้ไปที่JEP 361แล้วศึกษา มีข้อมูลที่น่าสนใจมากมายที่นั่น

JEP 362: เลิกใช้พอร์ต Solaris และ SPARC

ไม่น่าเป็นไปได้ที่ผู้อ่านของเราหลายคนจะจำเกี่ยวกับ ระบบปฏิบัติการ Solarisได้ ระบบปฏิบัติการที่ใช้ UNIX นี้สร้างขึ้นโดย Sun Microsystems ซึ่งเป็นผู้ปกครองของ Java ใช้สำหรับเซิร์ฟเวอร์บนสถาปัตยกรรม SPARC เป็นหลัก... มีคำที่ไม่คุ้นเคยมากเกินไปต่อตารางเซนติเมตรใช่หรือไม่ ไม่ใช่เรื่องใหญ่อะไร: JEP 362 สิ้นสุดการสนับสนุนสำหรับแพลตฟอร์ม Solaris/SPARC, Solaris/x64 และ Linux/SPARC นั่นคือพอร์ตของพวกเขาเลิกใช้แล้ว และในอนาคตพอร์ตเหล่านี้มีแนวโน้มที่จะถูกลบออกจาก OpenJDK อย่างไรก็ตาม Java เวอร์ชันเก่า (ก่อน JDK 14) ที่เกี่ยวข้องกับพอร์ต Solaris/SPARC, Solaris/x64 และ Linux/SPARC ควรทำงานโดยไม่มีการแก้ไข หากคุณเป็นผู้ชื่นชอบประวัติศาสตร์และสนใจในเทคโนโลยีแห่ง อดีต อันไม่ไกลนัก ไปที่ Wikipedia และอ่านเกี่ยวกับ สถาปัตยกรรม SPARS

JEP 363: ลบตัวรวบรวมขยะ Concurrent Mark Sweep (CMS)

ตัวรวบรวมขยะ CMS (Concurrent Mark Sweep) มีเป้าหมายในการลบออก เนื่องจากเมื่อสองปีที่แล้วถูกทำเครื่องหมายว่าล้าสมัยและปล่อยทิ้งไว้โดยไม่ได้รับการดูแล อย่างไรก็ตาม ผู้ใช้ Java เวอร์ชันเก่าที่ใช้ CMS GC สามารถหายใจออกได้ - จุดประสงค์ของ JEP นี้ไม่ใช่เพื่อลบตัวสร้างออกจาก JDK รุ่นก่อนหน้า นอกจากนี้ การรวมอัลกอริธึมการรวบรวมขยะ ParallelScavenge และ SerialOld (ที่ทำงานด้วยตัวเลือก "-XX:+UseParallelGC -XX:-UseParallelOldGC") ได้ถูกเลิกใช้แล้ว

JEP 364: ZGC บน macOSและJEP 365: ZGC บน Windows

มีรถเก็บขยะที่น่าสนใจชื่อว่าZ Garbage Collector (ZGC ) มันทำงานในโหมดพาสซีฟและพยายามลดความล่าช้าเนื่องจากการรวบรวมขยะ: เวลาหยุดเมื่อใช้ ZGC ไม่เกิน 10 ms สามารถทำงานกับฮีปขนาดเล็กและฮีปขนาดใหญ่ได้ (ซึ่งใช้พื้นที่หลายเทราไบต์) JEP 364 และ JEP 365 เป็นแฝดกันจริงๆ JEP 364 นำ Z Garbage Collector มาสู่ MacOS ส่วนหนึ่งของ JEP ยังอธิบายฟังก์ชันการทำงานของตัวรวบรวมสำหรับการเพิ่มหน่วยความจำอุปกรณ์ที่ไม่ได้ใช้ ตามที่ระบุไว้ในJEP 351สิ่งนี้เกิดขึ้นตั้งแต่ Java 13 การใช้งาน ZGC บน macOS มีสองส่วน:
  • รองรับหน่วยความจำหลายแผนที่บน macOS
  • รองรับ ZGC สำหรับการสำรองหน่วยความจำอย่างต่อเนื่อง
JEP 365 ให้การสนับสนุน ZGC อยู่แล้วบน Windows และในโหมดทดลองด้วย มันเป็นดังนี้:
  • รองรับหน่วยความจำหลายแผนที่
  • รองรับการแมปหน่วยความจำตามไฟล์เพจลงในพื้นที่ที่อยู่ที่สงวนไว้
  • รองรับการแมปและการแมปส่วนต่างๆ ของฮีปตามอำเภอใจ
  • รองรับการคอมมิตและไม่คอมมิตส่วนต่างๆ ของฮีป

JEP 366: เลิกใช้การรวม ParallelScavenge + SerialOld GC

JEP นี้เลิกใช้การรวมกันของ Parallel Scavenge และอัลกอริธึมการรวบรวมขยะแบบเก่าแบบอนุกรม ต้องเปิดใช้งานชุดค่าผสมนี้ด้วยตนเองโดยใช้พารามิเตอร์บรรทัดคำสั่ง -XX: + UseParallelGC -XX: -UseParallelOldGC ผู้เขียนเชื่อว่าชุดค่าผสมนี้มีความเฉพาะเจาะจงมาก แต่ก็ต้องใช้ความพยายามในการบำรุงรักษาอย่างมากเช่นกัน ดังนั้นตอนนี้ตัวเลือก -XX: UseParallelOldGC เลิกใช้แล้ว และคำเตือนจะปรากฏขึ้นหากใช้

JEP 367: ลบเครื่องมือ Pack200 และ API

Pack200เป็นรูปแบบไฟล์เก็บถาวรที่ปรับให้เหมาะสมสำหรับการจัดเก็บไฟล์คลาส Java ที่คอมไพล์แล้ว เครื่องมือนี้ถูกทำเครื่องหมายว่าเลิกใช้แล้วตั้งแต่ Java 11 ขณะนี้เครื่องมือ API ของ pack200, unpack200 และ Pack200 ได้รับการประกาศอย่างเป็นทางการให้ลบออกจากแพ็คเกจjava.util.jar เทคโนโลยีนี้ถูกนำมาใช้ใน Java 5 เพื่อจัดการกับแบนด์วิธที่จำกัดมาก (โมเด็ม 56k น่ากลัวที่จะพูดและจดจำ) และพื้นที่เก็บข้อมูลไม่เพียงพอบนฮาร์ดไดรฟ์ เมื่อไม่นานมานี้ Java 9 ได้เปิดตัวรูปแบบการบีบอัดข้อมูลใหม่ นักพัฒนาซอฟต์แวร์ได้ รับ การสนับสนุนให้ใช้jlink

JEP 368: บล็อกข้อความ (ตัวอย่างที่สอง)

บล็อกข้อความปรากฏขึ้นครั้งแรกใน Java 13 ซึ่งเป็นตัวอักษรสตริงหลายบรรทัดที่ป้องกันความจำเป็นในการหลีกเลี่ยงลำดับส่วนใหญ่ จัดรูปแบบสตริงโดยอัตโนมัติ และยังอนุญาตให้นักพัฒนาจัดรูปแบบสตริงหากจำเป็น คุณสมบัติที่มีประโยชน์นี้พร้อมใช้งานแล้วใน Java 14 (ตัวอย่างที่ 2) วัตถุประสงค์หลักของบล็อกข้อความคือเพื่อปรับปรุงการจัดการตัวอักษรหลายบรรทัดที่ทำให้เกิดความสับสน ซึ่งช่วยลดความยุ่งยากในการอ่านและเขียนคำสั่ง SQL, โค้ด HTML และ XML และ JSON ได้อย่างมาก ตัวอย่าง HTML ที่ไม่มีบล็อกข้อความ:
String html = "<html>\n" +
              "    <body>\n" +
              "        <p>Hello, JavaRush Student</p>\n" +
              "    </body>\n" +
              "</html>\n";
วิธีนำเสนอสิ่งเดียวกันกับบล็อกข้อความ:
String html = """
              <html>
                  <body>
                      <p>Hello, JavaRush Student</p>
                  </body>
              </html>
              """;
ตัวคั่นการเปิดคือลำดับของอักขระเครื่องหมายคำพูดคู่ 3 ตัว ("" ") ตามด้วยช่องว่างตั้งแต่ 0 ขึ้นไป ตามด้วยตัวคั่นบรรทัด เนื้อหาเริ่มต้นที่อักขระตัวแรกหลังตัวคั่นบรรทัดของตัวคั่นเปิด ตัวคั่น ปิดคือ มีการเลือก ลำดับของอักขระเครื่องหมายคำพูดคู่สามตัว " _ ) เพื่อให้สามารถแสดงอักขระได้โดยไม่ต้อง Escape และยังแยกความแตกต่างระหว่างบล็อกข้อความจากตัวอักษรสตริงได้ด้วย ในต้นปี 2019 JEP 355 เสนอบล็อกข้อความเป็นส่วนต่อจาก JEP 326 (ตัวอักษรสตริงดิบ) แต่บล็อกข้อความเหล่านั้นถูกถอนออกไป ต่อมาในปีนั้น JDK 13 ได้เปิดตัวฟีเจอร์แสดงตัวอย่างบล็อกข้อความ และตอนนี้ Java 14 ได้เพิ่มลำดับการหลีกเลี่ยงใหม่สองลำดับ นี่คือตัวสิ้นสุดบรรทัด ซึ่งเขียนแทนด้วย \ และตัวที่สองคือสำหรับช่องว่างเดี่ยว ซึ่งเขียนแทนด้วย /s ตัวอย่างการใช้บรรทัดใหม่โดยไม่มีบล็อคข้อความ:
String literal = "This is major Tom to Ground Control " +
"I am stepping through the door... " +
"Wait… What???";
และตอนนี้ด้วยลำดับการหลีกเลี่ยง \<line-terminator>:
String text = """
                This is major Tom to Ground Control \
                I am stepping through the door... \
                WaitWhat???\
                """;
ลำดับการหลีก\sใช้เพื่อพิจารณาช่องว่างต่อท้าย ซึ่งคอมไพเลอร์จะละเว้นตามค่าเริ่มต้น จะรักษาช่องว่างทั้งหมดที่นำหน้าไว้ ตัวอย่าง:
String text1 = """
               line1
               line2 \s
               line3
               """;

String text2 = "line1\nline2 \nline3\n";
text1และtext2เหมือนกัน

JEP 370: API การเข้าถึงหน่วยความจำต่างประเทศ (ศูนย์บ่มเพาะ)

ไลบรารีและโปรแกรม Java ยอดนิยมจำนวนมากสามารถเข้าถึงหน่วยความจำภายนอกได้ ตัวอย่างเช่น Ignite, MapDB, Memcached และ Netty ByteBuf API ในการทำเช่นนั้น พวกเขาสามารถหลีกเลี่ยงค่าใช้จ่ายและความไม่แน่นอนที่เกี่ยวข้องกับการรวบรวมขยะ (โดยเฉพาะอย่างยิ่งเมื่อให้บริการแคชขนาดใหญ่) แบ่งปันหน่วยความจำระหว่างหลายกระบวนการ และซีเรียลไลซ์และดีซีเรียลไลซ์เนื้อหาหน่วยความจำโดยการแมปไฟล์ในหน่วยความจำ (เช่น การใช้ mmap) อย่างไรก็ตาม Java API ยังไม่มีโซลูชันที่เหมาะสมสำหรับการเข้าถึงหน่วยความจำภายนอก JDK 14 มีการแสดงตัวอย่างของForeign-Memory Access APIซึ่งช่วยให้แอปพลิเคชัน Java สามารถเข้าถึงขอบเขตหน่วยความจำภายนอกฮีป JVM ได้อย่างปลอดภัยและมีประสิทธิภาพโดยใช้ MemorySegment, MemoryAddress และ MemoryLayout abstractions ใหม่

ข้อสรุป

ดังนั้นสิ่งที่คุณคิดว่า? เมื่อเปรียบเทียบกับ Java 13 แล้ว Java 14 ใหม่มีการปรับปรุงที่สำคัญอีกมากมายในหลากหลายด้าน เป็นไปได้มากว่าสิ่งที่สำคัญที่สุดสำหรับนักพัฒนาคือสวิตช์ที่อัปเดต ข้อยกเว้นเพิ่มเติม NullPointerExceptions และบันทึก หรือไม่?.. อย่าลืมลองใช้คุณสมบัติใหม่ของ Java 14 ซึ่งมีประโยชน์มากแม้แต่สำหรับผู้เริ่มต้น ขอให้โชคดีกับการเรียนของคุณ!
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION