JDK 15: Ciri-ciri baru di Java 15

Java Development Kit 15, pelaksanaan Oracle dari Java SE versi berikutnya (Edisi Standard), tersedia sebagai rilis produksi hari ini, 15 September 2020. Sorotan JDK 15 merangkumi blok teks, kelas tersembunyi, API akses memori asing, Z Garbage Collector, dan pratonton kelas tertutup, pemadanan corak, dan rekod.

JDK 15 hanyalah pelepasan jangka pendek, hanya akan disokong dengan Oracle Premier Support selama enam bulan sehingga JDK 16 tiba pada Mac depan. JDK 17, rilis Sokongan Jangka Panjang berikutnya, yang akan didukung oleh Oracle selama lapan tahun, dijadualkan tiba satu tahun dari sekarang, seperti irama pelepasan enam bulan Oracle untuk versi Java SE.

Pembangun boleh melihat JDK 15 sekarang untuk mendapatkan idea mengenai apa yang akan ada di JDK 17, kata Georges Saab, presiden Kumpulan Platform Java Oracle. Keluaran LTS terkini adalah JDK 11, yang tiba pada bulan September 2018. Pelepasan LTS tiba setiap tiga tahun. JDK 15 mengikuti JDK 14, yang dikeluarkan pada 17 Mac 2020. 

Ciri dan perubahan baru dalam OpenJDK 15:

  • Inkubator kedua API akses memori asing, yang memungkinkan program Java mengakses memori asing dengan selamat dan efisien di luar tumpukan Java. API harus dapat beroperasi pada pelbagai jenis memori asing, seperti timbunan asli, berterusan, dan terkawal. Banyak program Java mengakses memori asing, seperti Ignite dan MapDB. API akan membantu mengelakkan kos dan ketidakpastian yang berkaitan dengan pengumpulan sampah, berkongsi memori di seluruh proses, dan membuat siri dan menyahsensilkan kandungan memori dengan memetakan fail ke memori. API Java pada masa ini tidak memberikan penyelesaian yang memuaskan untuk mengakses memori asing. Tetapi dengan cadangan baru, API tidak boleh merosakkan keselamatan JVM. Keupayaan ini melalui fasa inkubator sebelumnya di JDK 14, dengan penambahbaikan yang ditawarkan di JDK 15. 
  • Pratonton kelas yang dimeteraikan. Bersama dengan antaramuka, kelas yang dimeterai mengehadkan kelas atau antara muka lain yang boleh diperluas atau dilaksanakan. Matlamat ciri ini termasuk membenarkan pengarang kelas atau antara muka untuk mengawal kod mana yang bertanggung jawab untuk melaksanakannya, memberikan cara yang lebih deklaratif daripada pengubah akses untuk menyekat penggunaan superclass, dan menyokong petunjuk masa depan dalam pemadanan corak dengan menyokong lengkap analisis corak.
  • Penghapusan kod sumber dan sokongan build untuk port Solaris / SPARC, Solaris / x64, dan Linux / SPARC, yang tidak digunakan lagi untuk dikeluarkan di JDK 14 dengan tujuan untuk menghapusnya dalam rilis yang akan datang. Banyak projek dan ciri dalam pembangunan seperti Valhalla, Loom, dan Panama memerlukan perubahan yang signifikan pada arsitektur CPU dan kod khusus sistem operasi. Menurunkan sokongan untuk port Solaris dan SPARC akan membolehkan penyumbang komuniti OpenJDK mempercepat pengembangan ciri baru yang akan menggerakkan platform ke hadapan. Solaris dan SPARC telah digantikan dalam beberapa tahun kebelakangan ini oleh pemproses OS Linux dan Intel.
  • Rekod, yang merupakan kelas yang bertindak sebagai pembawa telus untuk data yang tidak berubah, akan dimasukkan dalam versi pratonton kedua di JDK 15, setelah memulakan debutnya sebagai pratonton awal di JDK 14. Matlamat rancangan termasuk merancang konstruk berorientasi objek yang menyatakan pengagregatan nilai yang sederhana, membantu pengaturcara menumpukan perhatian pada pemodelan data yang tidak berubah daripada tingkah laku yang dapat diperluas, secara automatik melaksanakan kaedah berdasarkan data seperti sama dan penilai, dan memelihara prinsip Java yang sudah lama seperti penaipan nominal dan kesesuaian migrasi. Rekod boleh dianggap sebagai tupel nominal. 
  • Tandatangan kriptografi berdasarkan Algoritma Tandatangan Digital Edwards-Curve (EdDSA). EdDSA adalah skema lengkung elips moden dengan kelebihan berbanding skema tandatangan sedia ada di JDK. EdDSA akan dilaksanakan hanya di penyedia SunEC. EdDSA sangat diminati kerana keselamatan dan prestasinya yang lebih baik dibandingkan dengan skema tandatangan yang lain; ia sudah disokong di perpustakaan crypto seperti OpenSSL dan BoringSSL.
  • Melengkapkan semula API DatagramSocket yang lama dengan menggantikan pelaksanaan java.net.datagram.Socketdan java.net.MulticastSocketAPI yang mendasarinya dengan pelaksanaan yang  lebih sederhana dan moden yang 1. senang didebug dan diselenggara dan 2. bekerja dengan utas maya yang sedang dijelajahi di Project Loom. Rancangan baru adalah tindak lanjut dari JDK Enhancement Proposal 353 yang menerapkan semula Socket API lama. Pelaksanaan semasa java.net.datagram.Socketdan java.net.MulticastSocketbermula dari JDK 1.0 dan ketika IPv6 masih dalam pembangunan. Oleh itu, pelaksanaan semasa  MulticastSocket cuba menggabungkan IPv4 dan IPv6 dengan cara yang sukar dijaga.
  • Menyahdayakan penguncian berat sebelah secara lalai dan menghentikan semua pilihan baris perintah yang berkaitan. Tujuannya adalah untuk menentukan keperluan untuk sokongan berterusan untuk pengoptimuman penyegerakan warisan yang mahal untuk dikunci, yang digunakan dalam mesin maya HotSpot untuk mengurangkan overhead penguncian yang tidak terkawal. Walaupun beberapa aplikasi Java dapat melihat kemerosotan kinerja dengan penguncian bias yang dinonaktifkan, peningkatan prestasi penguncian bias pada umumnya kurang jelas daripada sebelumnya.
  • Pratonton kedua pemadanan corak untuk instanceof, mengikuti pratonton sebelumnya di JDK 14. Pencocokan corak membolehkan logik umum dalam program, terutama pengekstrakan komponen dari objek, untuk dinyatakan dengan lebih mudah dan ringkas. Bahasa seperti Haskell dan C # telah merangkumi corak yang sesuai untuk keselamatan dan keselamatannya.
  • Kelas tersembunyi, iaitu kelas yang tidak dapat digunakan secara langsung oleh kod bytk kelas lain, dimaksudkan untuk digunakan oleh kerangka kerja yang menghasilkan kelas pada waktu runtime dan yang menggunakannya secara tidak langsung melalui refleksi. Kelas tersembunyi boleh didefinisikan sebagai anggota sarang kawalan akses dan boleh dimuat secara bebas daripada kelas lain. Cadangan itu akan meningkatkan kecekapan semua bahasa di JVM dengan membolehkan API standard untuk menentukan kelas tersembunyi yang tidak dapat ditemui dan mempunyai kitaran hidup yang terhad. Kerangka kerja di dalam dan di luar JDK akan dapat menghasilkan kelas secara dinamik yang sebaliknya dapat menentukan kelas tersembunyi. Banyak bahasa yang dibina berdasarkan JVM bergantung pada generasi kelas yang dinamik untuk fleksibiliti dan kecekapan. Matlamat cadangan ini termasuk: membenarkan kerangka kerja untuk menentukan kelas sebagai perincian pelaksanaan rangka kerja yang tidak dapat dijumpai,jadi mereka tidak dapat dihubungkan oleh kelas lain atau ditemui melalui refleksi; sokongan untuk memperluas sarang kawalan akses dengan kelas yang tidak dapat dijumpai; dan sokongan untuk pembongkaran kelas yang tidak dapat dijumpai secara agresif, jadi kerangka kerja mempunyai fleksibiliti untuk menentukan seberapa banyak yang diperlukan. Tujuan lain adalah untuk menghentikan penggunaan API bukan standard, misc.Unsafe::defineAnonymousClass, dengan niat untuk menghentikan penghapusan dalam rilis yang akan datang. Selain itu, bahasa Java tidak boleh diubah kerana cadangan ini.
  • Z Garbage Collector (ZGC) lulus dari ciri eksperimen ke produk di bawah cadangan ini. Diintegrasikan ke dalam JDK 11, yang tiba pada bulan September 2018, ZGC adalah pengutip sampah yang berskala rendah dan berskala rendah. ZGC diperkenalkan sebagai kemampuan eksperimen kerana pengembang Java memutuskan ciri ukuran dan kerumitan ini harus dibawa dengan hati-hati dan bertahap. Sejak itu, sejumlah peningkatan telah ditambahkan, mulai dari pembongkaran kelas serentak, pemuatan memori yang tidak terpakai, dan dukungan untuk perkongsian data kelas hingga peningkatan kesedaran NUMA dan pra-sentuhan timbunan multi-utas. Juga, ukuran timbunan maksimum telah meningkat dari empat terabyte menjadi 16 terabyte. ZGC menangani masalah prestasi dalam aplikasi yang melibatkan sejumlah besar data, seperti pembelajaran mesin,di mana pengguna ingin memastikan bahawa pemprosesan data tidak akan mengalami ketidakpastian atau jeda lama kerana pengumpulan sampah. Platform yang disokong merangkumi Linux, Windows, dan MacOS.
  • Blok teks, yang dipratinjau di JDK 14 dan JDK 13, bertujuan untuk mempermudah tugas menulis program Java dengan mempermudah untuk mengekspresikan rentetan yang merangkumi beberapa baris kod sumber, sambil menghindari urutan pelarian dalam kes biasa. Blok teks adalah literal rentetan berbilang baris yang menghindari keperluan untuk kebanyakan urutan melarikan diri, secara automatik memformat rentetan dengan cara yang dapat diramalkan, dan menawarkan pengembang kawalan terhadap format apabila dikehendaki. Matlamat cadangan blok teks adalah meningkatkan keterbacaan rentetan dalam program Java yang menunjukkan kod yang ditulis dalam bahasa bukan Java. Tujuan lain adalah untuk menyokong migrasi dari literal string dengan menetapkan bahawa setiap konstruk baru dapat mengekspresikan set string yang sama dengan string literal, menafsirkan urutan pelarian yang sama, dan dimanipulasi dengan cara yang sama seperti string literal.Pembangun OpenJDK berharap dapat menambahkan urutan pelarian untuk menguruskan ruang kosong dan kawalan barisan baru.
  • Pengutip sampah jeda waktu rendah Shenandoah akan menjadi ciri pengeluaran dan keluar dari peringkat eksperimen. Ia telah disatukan ke JDK 12 tahun lalu.
  • Penyingkiran Nashorn, yang memulai debutnya pada JDK 8 pada bulan Mac 2014, tetapi sejak itu dibuat usang oleh teknologi seperti GraalVM. Cadangan OpenJDK 15 memerlukan penghapusan API Nashorn dan alat baris perintah jjs yang digunakan untuk memanggil Nashorn.
  • Penghentian mekanisme Pengaktifan RMI, untuk penghapusan di masa hadapan. Mekanisme Pengaktifan RMI adalah bahagian lama RMI yang menjadi pilihan sejak Java 8. Pengaktifan RMI mengenakan beban penyelenggaraan yang berterusan. Tidak ada bahagian lain dari RMI yang akan digunakan.