Java 9 อยู่ที่นี่: ทุกสิ่งที่คุณจำเป็นต้องรู้

Java 9 อย่างเป็นทางการ Java Platform Standard Edition เวอร์ชัน 9 - ในที่สุดก็มาถึงแล้วและ Java Development Kit (JDK) พร้อมให้นักพัฒนาดาวน์โหลด

มีความสำคัญหลายประการหากมีคุณสมบัติใหม่ที่ขัดแย้งกัน แต่ก็เป็นสิ่งสุดท้ายสำหรับการส่ง Java แบบเก่า

จะดาวน์โหลด Java 9 JDK ได้ที่ไหน

Oracle ได้โพสต์ Java SE 9 JDK และเอกสารสำหรับดาวน์โหลดโดยนักพัฒนา

คุณสมบัติใหม่ที่สำคัญใน Java 9

การเปิดตัวเกือบสามปีหลังจาก Java SE 8, Java SE 9 มีการเปลี่ยนแปลงทางสถาปัตยกรรมที่สำคัญหลายอย่างรวมถึงการปรับปรุงมากมาย

โมดูลาร์ของ Java 9 เป็นตัวเปลี่ยนเกม

ความสามารถในการแยกส่วนใหม่ที่เป็นที่ถกเถียงกันบนพื้นฐานของ Project Jigsaw จะทำให้เกิดความสนใจของร้านค้า Java ที่ทันสมัยที่ต้องการเห็นสิ่งที่ JDK 9 นำเสนอในตอนนี้แม้ว่าร้านค้าที่อนุรักษ์นิยมจะตัดสินใจรอให้โมดูลาร์เติบโตเต็มที่

Modularity ในรูปแบบของ Java Platform Module System - แบ่ง JDK ออกเป็นชุดของโมดูลสำหรับการรวมขณะรันคอมไพล์หรือสร้างเวลา Modularity เรียกว่าการเปลี่ยนแปลงแบบ "สกรรมกริยา" ทำให้เข้าใจการพึ่งพาระหว่างโมดูลต่างๆ

โมดูลาร์ของ Java 9 ควรจะช่วยให้นักพัฒนาสามารถประกอบและบำรุงรักษาแอปพลิเคชันที่ซับซ้อนได้ง่ายขึ้น นอกจากนี้ควรทำให้ Java สามารถลดขนาดอุปกรณ์ขนาดเล็กลงได้ดีขึ้นในขณะที่ความปลอดภัยและประสิทธิภาพดีขึ้น

ด้านความเป็นโมดูลาร์ของ Java 9 รวมถึงบรรจุภัณฑ์ของแอปพลิเคชันการทำโมดูล JDK เองและการจัดระเบียบซอร์สโค้ดใหม่เป็นโมดูล ระบบบิลด์ได้รับการปรับปรุงเพื่อคอมไพล์โมดูลและบังคับใช้ขอบเขตของโมดูลในเวลาสร้าง อิมเมจ JDK และ Java Runtime Environment (JRE) ได้รับการปรับโครงสร้างใหม่เพื่อจัดการกับโมดูล นอกจากนี้การควบคุม JavaFX UI และ CSS API ยังสามารถเข้าถึงได้สำหรับโมดูลาร์

รองรับโฮสต์ของการกำหนดค่า ด้วยเหตุนี้จึงควรปรับปรุงความสามารถในการปรับขนาดความปลอดภัยและประสิทธิภาพของแอปพลิเคชัน การปรับขนาด Java ให้ง่ายขึ้นเป็นอุปกรณ์ขนาดเล็กเป็นตัวขับเคลื่อนหลักของความพยายามแบบแยกส่วน

ด้วยความเป็นโมดูลาร์นักพัฒนาจะสามารถสร้างและดูแลไลบรารีและแอปพลิเคชันขนาดใหญ่สำหรับทั้ง Java SE (Standard Edition) และ Java EE (Enterprise Edition) ได้ดีขึ้น แต่ในระหว่างการพัฒนา Java 9 Oracle, IBM, Red Hat และคนอื่น ๆ มีความไม่เห็นด้วยอย่างมากเกี่ยวกับวิธีการเปลี่ยนแปลงที่รุนแรงในแพลตฟอร์ม ระบบโมดูลเองถูกปฏิเสธในเดือนพฤษภาคมโดยจะได้รับการอนุมัติในการลงคะแนนครั้งที่สองในเดือนมิถุนายนหลังจากมีความคืบหน้า

แม้จะมีข้อตกลงระหว่างผู้ให้บริการ Java รายใหญ่ แต่ก็ยังมีข้อถกเถียงกันอยู่ว่าโมดูลาร์จะทำให้นักพัฒนา Java ดีหรือไม่โดยผู้เชี่ยวชาญบางคนบอกว่าใช่และคนอื่น ๆ บอกว่าไม่ ไม่ว่า Java 9 จะเป็นโมดูลาร์แล้ว

เพื่อให้การโอนย้ายไปยัง Java 9 แบบโมดูลาร์ง่ายขึ้น Java 9 อนุญาตให้มีการเข้าถึงแบบสะท้อนแสงที่ผิดกฎหมายสำหรับโค้ดบนพา ธ คลาสซึ่งใช้โดย JRE เพื่อค้นหาคลาสและไฟล์รีซอร์ส ความสามารถนี้จะไม่ได้รับอนุญาตหลังจาก Java 9

การปรับปรุงคอมไพเลอร์สำหรับโค้ด Java 9

การอัปเกรด Java 9 มีความสามารถใหม่หลายประการสำหรับการคอมไพล์โค้ดซึ่งเป็นส่วนสำคัญในการคอมไพล์ล่วงหน้า (AoT) ยังอยู่ในช่วงทดลองความสามารถนี้ทำให้สามารถคอมไพล์คลาส Java ไปยังเนทีฟโค้ดก่อนที่จะเปิดตัวในเครื่องเสมือน คุณลักษณะนี้มีไว้เพื่อปรับปรุงเวลาเริ่มต้นของแอปพลิเคชันทั้งขนาดเล็กและขนาดใหญ่โดยมีผลกระทบ จำกัด ต่อประสิทธิภาพสูงสุด

คอมไพเลอร์ Just-in-time (JIT) นั้นรวดเร็ว แต่โปรแกรม Java มีขนาดใหญ่มากจนต้องใช้เวลานานในการอุ่นเครื่อง JIT โดยปล่อยให้วิธีการบางอย่างของ Java ไม่มีการคอมไพล์และประสิทธิภาพที่ลดลง การรวบรวมก่อนเวลามีขึ้นเพื่อแก้ไขปัญหาเหล่านี้

แต่ Dmitry Leskov ผู้อำนวยการฝ่ายการตลาดของ Excelsior ผู้จำหน่ายเทคโนโลยี Java กังวลว่าเทคโนโลยีการรวบรวมล่วงหน้ายังไม่สมบูรณ์เพียงพอและหวังว่า Oracle จะรอจนกว่า Java 10 จะเป็นเวอร์ชันที่มั่นคงยิ่งขึ้น

Java 9 ยังเสนอเฟสสองของการปรับใช้การคอมไพล์อัจฉริยะของ Oracle คุณลักษณะนี้เกี่ยวข้องกับการปรับปรุง  s javac ความเสถียรและความสามารถในการพกพาของเครื่องมือเพื่อให้สามารถใช้ใน JVM (Java Virtual Machine) ได้ตามค่าเริ่มต้น เครื่องมือนี้จะถูกทำให้เป็นแบบทั่วไปเพื่อให้สามารถใช้สำหรับโครงการขนาดใหญ่ที่อยู่นอก JDK JDK 9 ยังได้อัปเดต  javac คอมไพเลอร์เพื่อให้สามารถคอมไพล์โปรแกรม Java 9 เพื่อรันบน Java เวอร์ชันเก่าบางรุ่น

คุณลักษณะการคอมไพล์ใหม่ แต่เป็นการทดลองคือ Java-level JVM Compiler Interface (JVMCI) อินเทอร์เฟซนี้ช่วยให้คอมไพเลอร์ที่เขียนด้วย Java ถูกใช้เป็นไดนามิกคอมไพเลอร์โดย JVM API ของ JVMCI มีกลไกในการเข้าถึงโครงสร้าง VM ติดตั้งโค้ดที่คอมไพล์และเสียบเข้ากับระบบคอมไพล์ JVM

การเขียนคอมไพเลอร์ JVM ใน Java ควรอนุญาตให้มีคอมไพเลอร์คุณภาพสูงที่ดูแลรักษาและปรับปรุงได้ง่ายกว่าคอมไพเลอร์ที่มีอยู่ซึ่งเขียนด้วย C หรือ C ++ ด้วยเหตุนี้คอมไพเลอร์ที่เขียนด้วย Java จึงควรดูแลและปรับปรุงได้ง่ายกว่า ความพยายามอื่น ๆ ที่มีอยู่ในการเปิดใช้งานคอมไพเลอร์ใน Java ได้แก่ Graal Project และ Project Metropolis

ความสามารถในการควบคุมคอมไพลเลอร์ใหม่มีจุดมุ่งหมายเพื่อให้การควบคุมคอมไพเลอร์ JVM แบบละเอียดและขึ้นอยู่กับวิธีการทำให้นักพัฒนาสามารถเปลี่ยนตัวเลือกการควบคุมคอมไพลเลอร์ในรันไทม์โดยไม่มีการลดประสิทธิภาพ เครื่องมือนี้ยังช่วยแก้ปัญหาสำหรับบักคอมไพเลอร์ JVM

ในที่สุด REPL ก็มาถึง Java 9

Java 9 มีเครื่องมือ read-eval-print loop (REPL) ซึ่งเป็นอีกหนึ่งเป้าหมายระยะยาวสำหรับ Java ที่เริ่มใช้งานได้จริงในเวอร์ชันนี้หลังจากการพัฒนาหลายปีภายใต้ Project Kulia

เรียกว่า jShell ซึ่ง REPL ของ Java 9 จะประเมินคำสั่งและนิพจน์ที่เปิดเผย นักพัฒนาสามารถรับข้อเสนอแนะเกี่ยวกับโปรแกรมก่อนการคอมไพล์ได้เพียงแค่ป้อนโค้ดบางบรรทัด

ความสามารถของเครื่องมือบรรทัดคำสั่งรวมถึงการเติมแท็บและการเพิ่มอัฒภาคเทอร์มินัลที่จำเป็นโดยอัตโนมัติ jShell API ช่วยให้สามารถใช้งาน jShell ใน IDE และเครื่องมืออื่น ๆ ได้แม้ว่าเครื่องมือจะไม่ใช่ IDE ก็ตาม

การขาด REPL เป็นสาเหตุที่ทำให้โรงเรียนต้องย้ายออกจาก Java (ภาษาเช่น Python และ Scala มี REPL มานานแล้ว) แต่ Martin Odersky ผู้ก่อตั้งภาษา Scala ตั้งคำถามถึงประโยชน์ของ REPL ใน Java โดยกล่าวว่า Java นั้นเน้นคำสั่งในขณะที่ REPL นั้นเน้นการแสดงออก

การปรับปรุง Streams API ใน Java 9

สตรีมใน Java ช่วยให้นักพัฒนาสามารถแสดงการคำนวณเพื่อให้สามารถใช้ประโยชน์จากความขนานของข้อมูลได้อย่างมีประสิทธิภาพ ความสามารถในการสตรีมใน Java 8 ใช้สำหรับการประมวลผลข้อมูลอย่างเปิดเผยในขณะที่ใช้ประโยชน์จากสถาปัตยกรรมแบบหลายคอร์

ใน Java 9 Streams API จะเพิ่มเมธอดในการรับและวางไอเท็มแบบมีเงื่อนไขจาก Stream วนซ้ำบนอิลิเมนต์ Stream และสร้างสตรีมจากค่าที่เป็นโมฆะในขณะที่ขยายชุดของ Java SE API ที่สามารถใช้เป็นแหล่งสตรีม

โค้ดแคชแบ่งได้ใน Java 9

JDK 9 อนุญาตให้แบ่งโค้ดแคชออกเป็นส่วนต่างๆเพื่อปรับปรุงประสิทธิภาพและอนุญาตให้มีส่วนขยายเช่นการล็อกแบบละเอียด ผลลัพธ์ควรได้รับการปรับปรุงเวลาในการกวาดเนื่องจากตัวทำซ้ำเฉพาะทางข้ามรหัสที่ไม่ใช่วิธีการ แยกรหัสที่ไม่ใช่วิธีการทำโปรไฟล์และไม่มีโปรไฟล์ และปรับปรุงเวลาดำเนินการสำหรับเกณฑ์มาตรฐานบางอย่าง 

การสำรองข้อมูล JavaScript ที่ดีขึ้นใน Java 9 ผ่าน Project Nashorn

Project Nashorn ซึ่งมีรันไทม์ JavaScript ที่มีน้ำหนักเบาสำหรับ Java กำลังได้รับการปรับปรุงใน JDK 9 Project Nashorn เป็นความพยายามในการนำรันไทม์ JavaScript ที่มีประสิทธิภาพสูง แต่มีน้ำหนักเบาใน Java ติดตามโครงการ Rhino ที่เริ่มต้นที่ Netscape Project Nashorn ถูกตั้งข้อหาเปิดใช้งานการฝัง JavaScript ในแอปพลิเคชัน Java จัดเตรียม Java ด้วยเอ็นจิ้น JavaScript ใน JDK 8

JDK 9 มี API ตัวแยกวิเคราะห์สำหรับโครงสร้างไวยากรณ์ ECMAScript ของ Nashorn API เปิดใช้งานการวิเคราะห์รหัส ECMAScript โดย IDE และกรอบงานฝั่งเซิร์ฟเวอร์โดยไม่ขึ้นอยู่กับคลาสการใช้งานภายในของ Project Nashorn

HTTP / 2 ไคลเอนต์ API มาใน Java 9

API ไคลเอ็นต์ HTTP / 2 เบต้ามาถึง JDK 9 แล้วโดยนำไปใช้ใน Java เพื่ออัพเกรดเป็นโปรโตคอล HTTP หลักของเว็บ WebSocket ได้รับการสนับสนุนโดย API เช่นกัน

HTTP / 2 API สามารถแทนที่ HttpURLConnection API ซึ่งมีปัญหารวมถึงการออกแบบด้วยโปรโตคอลที่เลิกใช้แล้วการกำหนด HTTP / 1 ล่วงหน้าเป็นนามธรรมเกินไปและใช้งานยาก

ปรับปรุงการรองรับ HTML5 และ Unicode ใน Java 9

ใน JDK 9 เครื่องมือเอกสาร Javadoc ได้รับการปรับปรุงเพื่อสร้างมาร์กอัป HTML5 มาตรฐานการเข้ารหัส Unicode 8.0 ซึ่งเพิ่มอักขระ 8,000 ตัว 10 บล็อกและหกสคริปต์ได้รับการสนับสนุนเช่นกัน

DTLS security API ถูกเพิ่มใน Java 9

เพื่อความปลอดภัย Java 9 จะเพิ่ม API สำหรับ DTLS (Datagram Transport Layer Security) โปรโตคอลได้รับการออกแบบมาเพื่อป้องกันการดักฟังการปลอมแปลงและการปลอมแปลงข้อความในการสื่อสารไคลเอนต์ / เซิร์ฟเวอร์ มีการใช้งานสำหรับทั้งโหมดไคลเอนต์และเซิร์ฟเวอร์

Java 9 ใดที่เลิกใช้งานและลบออก

Java 9 เลิกใช้งานหรือลบคุณสมบัติหลายอย่างที่ไม่อยู่ในสมัยนิยมอีกต่อไป หัวหน้าของพวกเขาคือ Applet API ซึ่งเลิกใช้แล้ว ในตอนนี้ผู้ผลิตเบราว์เซอร์ที่คำนึงถึงความปลอดภัยได้เลิกใช้การสนับสนุนปลั๊กอินเบราว์เซอร์ Java แล้ว การถือกำเนิดของ HTML5 ยังช่วยทำให้พวกเขาเสียชีวิต ขณะนี้นักพัฒนาได้รับคำแนะนำเกี่ยวกับทางเลือกอื่น ๆ เช่น Java Web Start สำหรับการเปิดใช้งานแอปพลิเคชันจากเบราว์เซอร์หรือแอปพลิเคชันที่ติดตั้งได้ 

เครื่องมือ appletviewer กำลังเลิกใช้งานเช่นกัน

Java 9 ยังเลิกใช้ตัวรวบรวมขยะ Mark Sweep (CMS) พร้อมกันด้วยการสนับสนุนให้หยุดในรีลีสในอนาคต จุดประสงค์คือเพื่อเร่งการพัฒนาตัวรวบรวมขยะอื่น ๆ ในเครื่องเสมือน HotSpot ตัวเก็บขยะ G1 ที่มีการหยุดชั่วคราวต่ำมีจุดมุ่งหมายเพื่อทดแทน CMS ในระยะยาว

ในขณะเดียวกันชุดค่าผสมการรวบรวมขยะก่อนหน้านี้ที่เลิกใช้ใน JDK 8 จะถูกลบออกใน JDK 9 ซึ่งรวมถึงชุดค่าผสมที่ไม่ค่อยได้ใช้เช่น Incremental CMS, ParNew + SerialOld และ DefNew + CMS ซึ่งเพิ่มความซับซ้อนเป็นพิเศษให้กับฐานรหัสตัวรวบรวมขยะ

Java 9 ยังแสดงคำเตือน Java ในคำสั่งการนำเข้าเพื่อช่วยให้รหัสฐานขนาดใหญ่สะอาดคำเตือนที่เป็นขุย ด้วยฐานรหัสเหล่านี้ฟังก์ชันการทำงานที่เลิกใช้แล้วมักจะต้องได้รับการสนับสนุนในบางครั้ง แต่การนำเข้าโครงสร้างที่เลิกใช้แล้วไม่รับประกันว่าจะมีข้อความเตือนหากการใช้โครงสร้างเป็นไปโดยเจตนาและถูกระงับ

สิ่งที่ลบออกใน Java 9 คือความสามารถในการเลือก JRE ในเวลาเปิดตัวผ่านคุณสมบัติ Multiple JRE (mJRE) ไม่ค่อยมีการใช้ความสามารถมีความซับซ้อนในการใช้งานตัวเรียกใช้งาน Java และไม่เคยมีการบันทึกไว้อย่างสมบูรณ์เมื่อเปิดตัวใน JDK 5

Oracle ได้ลบเอเจนต์ JVM TI (Tool Interface) hprof (Heap Profiling) ซึ่งถูกแทนที่ใน JVM เครื่องมือ jhat ก็ถูกลบออกเช่นกันซึ่งถูกทำให้ล้าสมัยโดยตัวสร้างภาพและวิเคราะห์ฮีปที่เหนือกว่า

Java 9 เป็นจุดสิ้นสุดของบรรทัดเมื่อบรรทัด Java 9 ใหม่เริ่มต้นขึ้น

คุณสามารถพูดได้ว่า Java 9 กำลังจะมาพร้อมกับความสามารถใหม่ทั้งหมด Oracle เพิ่งเปิดเผยว่า Java 9 เป็นรุ่นสุดท้ายในแง่ของการกำหนดและเวลาที่ผ่านไประหว่างรุ่นหลัก ๆ

ต่อจากนี้ไป Java มีแผนจะมีจังหวะการวางจำหน่ายหกเดือนโดยเวอร์ชันหลักถัดไปจะเรียกว่า Java 18.3 ครบกำหนดในเดือนมีนาคม 2018 ตามด้วย Java 18.9 ในหกเดือนต่อมา

จังหวะการออกใหม่ของ Java ยังหมายความว่า JDK 9 จะไม่ถูกกำหนดให้เป็นรุ่นสนับสนุนระยะยาว แต่รุ่นระยะยาวถัดไปจะเป็น Java 18.9

จังหวะการเปิดตัวที่เร็วขึ้นของ Java ทำให้นักพัฒนาไม่ต้องรอนานสำหรับการเผยแพร่ครั้งใหญ่นอกจากนี้ยังอาจหมายความว่านักพัฒนาจะข้าม Java 9 และคุณสมบัติโมดูลาร์ที่ "ยังไม่บรรลุนิติภาวะ" และรอหกเดือนสำหรับเวอร์ชันใหม่ซึ่งอาจทำให้เกิดปัญหาใด ๆ Simon Maple ผู้อำนวยการฝ่ายสนับสนุน Java ของ ZeroTurnaround ผู้จำหน่ายเครื่องมือ Java กล่าว