Java 9 ada di sini: Semua yang perlu anda ketahui

Java 9 — secara formal, Java Platform Edisi Standard versi 9 — akhirnya ada di sini, dan Java Development Kit (JDK) tersedia untuk dimuat oleh pemaju.

Ini mempunyai beberapa ciri baru yang penting jika kontroversial, tetapi juga merupakan baris terakhir untuk gaya penyampaian Java lama.

Di mana memuat turun Java 9 JDK

Oracle telah menyiarkan Java SE 9 JDK dan dokumentasi untuk dimuat turun oleh pemaju.

Ciri baru utama di Java 9

Memulakan hampir tiga tahun setelah Java SE 8, Java SE 9 memiliki beberapa perubahan seni bina utama, dan juga sejumlah penambahbaikan.

Modulariti Java 9 adalah penukar permainan

Keupayaan modulariti baru yang kontroversial, berdasarkan Project Jigsaw, pasti akan memikat minat kedai-kedai Java canggih yang ingin melihat apa yang ditawarkan oleh JDK 9 sekarang, walaupun kedai-kedai yang lebih konservatif memutuskan untuk menunggu modulariti menjadi matang.

Modulariti — dalam bentuk Sistem Modul Platform Java — membagi JDK menjadi satu set modul untuk menggabungkan waktu berjalan, menyusun, atau membangun. Modulariti telah disebut sebagai "transitif" perubahan, yang memungkinkan pemahaman tentang kebergantungan di seluruh modul.

Modulariti Java 9 seharusnya memungkinkan pengembang lebih mudah mengumpulkan dan mengekalkan aplikasi yang canggih. Juga, ini harus menjadikan Java lebih baik untuk menurunkan ke perangkat yang lebih kecil sementara keamanan dan kinerja ditingkatkan.

Aspek modulariti Java 9 merangkumi pembungkusan aplikasi, memodulasi JDK itu sendiri, dan menyusun semula kod sumber menjadi modul. Sistem binaan ditingkatkan untuk menyusun modul dan menguatkuasakan had modul pada masa membina. Gambar JDK dan Java Runtime Environment (JRE) disusun semula untuk mengendalikan modul. Juga, kawalan JavaFX UI dan CSS API kini dapat diakses untuk modulariti.

Sejumlah konfigurasi disokong; hasilnya, skalabilitas, keamanan, dan kinerja aplikasi harus ditingkatkan. Peningkatan skala Java yang lebih mudah ke peranti kecil adalah pemacu utama usaha modular.

Dengan modulariti, pemaju akan dapat membina dan memelihara perpustakaan dan aplikasi besar untuk Java SE (Edisi Standard) dan Java EE (Edisi Perusahaan) dengan lebih baik. Tetapi semasa pengembangan Java 9, Oracle, IBM, Red Hat, dan lain-lain mempunyai perselisihan besar mengenai bagaimana membuat perubahan radikal dalam platform ini. Sistem modul itu sendiri ditolak pada bulan Mei, hanya akan disetujui pada undian kedua pada bulan Jun, setelah kemajuan dibuat.

Walaupun dengan persetujuan antara vendor Java utama, masih ada kontroversi mengenai apakah modulariti akan membuat pemaju Java sangat baik, dengan beberapa pakar mengatakan ya dan yang lain mengatakan tidak. Apapun, Java 9 kini dimodulasi.

Untuk mempermudah penghijrahan ke Java 9 yang dimodulasi, Java 9 membenarkan akses reflektif haram untuk kod pada jalur kelas, yang digunakan oleh JRE untuk mencari kelas dan fail sumber. Keupayaan ini akan dilarang selepas Java 9.

Penambahbaikan penyusun untuk kod Java 9

Peningkatan Java 9 mempunyai beberapa keupayaan baru untuk menyusun kod, yang utama adalah penyusunan awal (AoT). Masih dalam fasa eksperimen, kemampuan ini memungkinkan penyusunan kelas Java ke kod asli sebelum dilancarkan di mesin maya. Ciri ini bertujuan untuk meningkatkan masa permulaan aplikasi kecil dan besar, dengan kesan terhad pada prestasi puncak.

Penyusun tepat pada masanya (JIT) cepat, tetapi program Java menjadi sangat besar sehingga memerlukan waktu yang lama untuk JIT memanaskan sepenuhnya, meninggalkan beberapa kaedah Java yang tidak disusun dan melemahkan prestasi. Penyusunan masa depan bertujuan untuk mengatasi masalah ini.

Tetapi Dmitry Leskov, pengarah pemasaran di vendor teknologi Java Excelsior, bimbang bahawa teknologi penyusunan masa depan tidak cukup matang dan berharap Oracle telah menunggu hingga Java 10 untuk versi yang lebih mantap.

Java 9 juga menawarkan tahap kedua penyebaran kompilasi pintar Oracle. Ciri ini melibatkan peningkatan  s javac kestabilan dan mudah alih alat sehingga boleh digunakan di JVM (Java Virtual Machine) secara lalai. Alat ini juga akan digeneralisasikan sehingga dapat digunakan untuk projek besar di luar JDK. JDK 9 juga telah mengemas kini  javac pengkompil sehingga dapat menyusun program Java 9 untuk dijalankan pada beberapa versi Java yang lebih lama.

Ciri kompilasi baru - tetapi eksperimental - lain adalah JVM Compiler Interface (JVMCI) peringkat Java. Antaramuka ini membolehkan penyusun yang ditulis dalam Java digunakan sebagai penyusun dinamik oleh JVM. API JVMCI menyediakan mekanisme untuk mengakses struktur VM, memasang kod yang disusun, dan memasukkan ke dalam sistem penyusunan JVM.

Menulis penyusun JVM di Java harus memungkinkan penyusun berkualiti tinggi yang lebih senang dijaga dan diperbaiki daripada penyusun sedia ada yang ditulis dalam C atau C ++. Akibatnya, penyusun yang ditulis di Jawa itu sendiri harus lebih mudah dijaga dan diperbaiki. Lain-lain, usaha yang ada untuk mengaktifkan penyusun dalam Java termasuk Graal Project dan Project Metropolis.

Keupayaan kawalan penyusun baru bertujuan untuk memberikan kawalan komprehensif dan bergantung pada kaedah-kaedah dari penyusun JVM, yang membolehkan pembangun mengubah pilihan kawalan penyusun dalam jangka masa tanpa penurunan prestasi. Alat ini juga membolehkan penyelesaian untuk bug penyusun JVM.

REPL akhirnya datang ke Java 9

Java 9 mempunyai alat baca-eval-print loop (REPL) -satu lagi tujuan jangka panjang untuk Java yang menjadi nyata dalam versi ini, setelah bertahun-tahun dikembangkan di bawah Project Kulia.

Disebut jShell, REPL Java 9 secara interaktif menilai pernyataan dan ungkapan deklaratif. Pembangun boleh mendapatkan maklum balas mengenai program sebelum penyusunan hanya dengan memasukkan beberapa baris kod.

Keupayaan alat baris perintah merangkumi penyelesaian tab dan penambahan titik koma terminal yang diperlukan secara automatik. API jShell membolehkan fungsi jShell dalam IDE dan alat lain, walaupun alat itu sendiri bukan IDE.

Kekurangan REPL disebut sebagai alasan sekolah berpindah dari Jawa. (Bahasa seperti Python dan Scala telah lama memiliki REPL.) Tetapi pengasas bahasa Scala, Martin Odersky mempersoalkan kegunaan REPL di Java, dengan mengatakan Java berorientasikan pernyataan sedangkan REPL berorientasi ekspresi.

Peningkatan API Aliran di Java 9

Aliran di Java memungkinkan pengembang mengekspresikan pengiraan sehingga paralelisme data dapat dimanfaatkan secara efisien. Keupayaan Stream di Java 8 adalah untuk memproses data secara deklaratif sambil memanfaatkan seni bina multikore.

Di Java 9, Streams API menambahkan kaedah untuk mengambil dan melepaskan item dari Stream secara bersyarat, melakukan iterasi pada elemen Stream, dan membuat aliran dari nilai yang tidak dapat ditoleransi sambil memperluas set API Java SE yang dapat berfungsi sebagai sumber Stream.

Cache kod boleh dibahagikan di Java 9

JDK 9 membolehkan cache kod dibahagikan kepada segmen untuk meningkatkan prestasi dan membenarkan peluasan seperti penguncian halus. Hasilnya mesti diperbaiki masa sapuan kerana iterator khusus melangkau kod bukan kaedah; memisahkan kod bukan kaedah, berprofil, dan tidak berprofil; dan meningkatkan masa pelaksanaan untuk beberapa penanda aras. 

Penyokong JavaScript yang lebih baik di Java 9 melalui Project Nashorn

Project Nashorn, yang menyediakan waktu operasi JavaScript ringan untuk Java, sedang ditingkatkan di JDK 9. Project Nashorn adalah usaha untuk melaksanakan jangka waktu JavaScript yang berkinerja tinggi, tetapi ringan di Jawa, setelah proyek Rhino yang dimulai di Netscape. Project Nashorn ditugaskan untuk mengaktifkan penyisipan JavaScript dalam aplikasi Java. Ini menyediakan Java dengan mesin JavaScript di JDK 8.

JDK 9 merangkumi API penghurai untuk pohon sintaks ECMAScript Nashorn. API ini membolehkan analisis kod ECMAScript oleh IDE dan kerangka sisi pelayan tanpa bergantung pada kelas pelaksanaan dalaman Project Nashorn.

API klien HTTP / 2 datang ke Java 9

API klien HTTP / 2 beta telah datang ke JDK 9, menerapkan di Java peningkatan ke protokol HTTP teras web. WebSocket disokong oleh API juga.

API HTTP / 2 dapat menggantikan HttpURLConnection API, yang mengalami masalah, termasuk dirancang dengan protokol yang sudah tidak berfungsi sekarang, mendahului HTTP / 1, terlalu abstrak, dan sulit digunakan.

Sokongan HTML5 dan Unicode yang ditingkatkan di Java 9

Di JDK 9, alat dokumentasi Javadoc ditingkatkan untuk menghasilkan markup HTML5. Standard pengekodan Unicode 8.0 — yang menambah 8,000 aksara, 10 blok, dan enam skrip — juga disokong.

API keselamatan DTLS ditambahkan ke Java 9

Untuk keselamatan, Java 9 menambahkan API untuk DTLS (Datagram Transport Layer Security). Protokol ini telah dirancang untuk mencegah penyadapan, gangguan, dan pemalsuan mesej dalam komunikasi klien / pelayan. Pelaksanaan disediakan untuk mod pelanggan dan pelayan.

Apa yang diturunkan dan dikeluarkan oleh Java 9

Java 9 menghentikan atau membuang beberapa ciri yang tidak lagi boleh digunakan. Ketua di antaranya adalah API Applet, yang tidak digunakan lagi. Telah menjadi gaya sekarang bahawa pembuat penyemak imbas yang sedar keselamatan telah menghapus sokongan untuk pemalam penyemak imbas Java. Kemunculan HTML5 juga membantu mewujudkan kematian mereka. Pembangun kini dipandu untuk alternatif seperti Java Web Start, untuk melancarkan aplikasi dari penyemak imbas, atau aplikasi yang dapat dipasang. 

Alat appletviewer juga tidak digunakan lagi.

Java 9 juga menghentikan pengumpul sampah Concurrent Mark Sweep (CMS), dengan sokongan untuk berhenti pada pelepasan yang akan datang. Tujuannya adalah untuk mempercepat pengembangan pengumpul sampah lain di mesin maya HotSpot. Pengutip sampah G1 dengan jeda rendah bertujuan untuk menjadi pengganti CMS jangka panjang.

Sementara itu, kombinasi pengumpulan sampah yang sebelumnya tidak digunakan lagi di JDK 8 dikeluarkan di JDK 9. Ini termasuk kombinasi yang jarang digunakan seperti Incremental CMS, ParNew + SerialOld, dan DefNew + CMS, yang menambah kerumitan tambahan pada pangkalan kod pengumpul sampah.

Java 9 juga memberikan amaran Java pada pernyataan import, untuk membantu membuat pangkalan kod besar bersih dari amaran serat. Dengan asas kod ini, fungsi yang tidak digunakan sering kali mesti disokong untuk beberapa waktu, tetapi mengimport konstruk yang tidak digunakan tidak menjamin mesej amaran jika penggunaan konstruk disengaja dan ditekan.

Juga dihapus di Java 9 adalah kemampuan untuk memilih JRE pada waktu pelancaran melalui fitur Multiple JRE (mJRE). Kemampuan itu jarang digunakan, menyulitkan pelaksanaan peluncur Java, dan tidak pernah didokumentasikan sepenuhnya ketika debut di JDK 5.

Oracle telah mengeluarkan ejen hprof JVM TI (Tool Interface) (Profap Heap), yang telah digantikan di JVM. Alat jhat juga dikeluarkan, setelah digunakan oleh visualiser dan penganalisis timbunan yang unggul.

Java 9 adalah akhir barisnya ketika baris Java 9 baru bermula

Anda boleh mengatakan bahawa Java 9 akan keluar dengan penuh semangat, dengan semua kemampuan baru. Baru-baru ini Oracle mendedahkan bahawa Java 9 adalah yang terakhir seumpamanya, dari segi sebutannya dan masa yang berlalu antara siaran utama.

Mulai sekarang, Java direncanakan memiliki irama pelepasan enam bulan, dengan versi utama berikutnya, yang disebut Java 18.3, akan berakhir bulan Mac 2018, diikuti oleh Java 18.9 enam bulan kemudian.

Irama rilis baru Java juga bermaksud JDK 9 tidak akan ditetapkan sebagai pelepasan sokongan jangka panjang. Sebaliknya, pelepasan jangka panjang seterusnya adalah Java 18.9.

Irama pelepasan Java yang lebih cepat bermaksud pembangun tidak perlu menunggu selama rilis utama. Ini juga mungkin bermaksud bahawa pembangun akan melangkau Java 9 dan ciri modularitasnya yang "tidak matang" dan menunggu enam bulan untuk versi baru, yang kemungkinan akan menyekat keriting, kata Simon Maple, pengarah advokasi Java di vendor alat Java ZeroTurnaround.