JDK 15: Fitur baru di Java 15

Java Development Kit 15, implementasi Oracle dari Java SE (Standard Edition) versi berikutnya, tersedia sebagai rilis produksi hari ini, 15 September 2020. Sorotan JDK 15 termasuk blok teks, kelas tersembunyi, API akses memori asing, Pengumpul Sampah Z, dan pratinjau kelas tersegel, pencocokan pola, dan catatan.

JDK 15 hanyalah rilis jangka pendek, hanya akan didukung dengan Dukungan Oracle Premier selama enam bulan hingga JDK 16 tiba Maret mendatang. JDK 17, rilis Dukungan Jangka Panjang berikutnya, yang akan didukung oleh Oracle selama delapan tahun, dijadwalkan untuk tiba satu tahun dari sekarang, sesuai irama rilis enam bulan Oracle untuk versi Java SE.

Pengembang dapat melihat JDK 15 sekarang untuk mendapatkan gambaran tentang apa yang akan ada di JDK 17, kata Georges Saab, presiden Java Platform Group dari Oracle. Rilis LTS saat ini adalah JDK 11, yang tiba pada September 2018. Rilis LTS tiba setiap tiga tahun. JDK 15 mengikuti JDK 14 yang dirilis pada 17 Maret 2020. 

Fitur dan perubahan baru di OpenJDK 15:

  • Inkubator kedua dari API akses memori asing, yang akan memungkinkan program Java mengakses memori asing dengan aman dan efisien di luar heap Java. API harus dapat beroperasi pada berbagai jenis memori asing, seperti native, persistent, dan managed heap. Banyak program Java mengakses memori asing, seperti Ignite dan MapDB. API akan membantu menghindari biaya dan ketidakpastian yang terkait dengan pengumpulan sampah, berbagi memori di seluruh proses, dan membuat serial dan deserialisasi konten memori dengan memetakan file ke memori. Java API saat ini tidak memberikan solusi yang memuaskan untuk mengakses memori asing. Tetapi dengan proposal baru, seharusnya API tidak dapat merusak keamanan JVM. Kemampuan ini sedang melalui fase inkubator sebelumnya di JDK 14, dengan penyempurnaan ditawarkan di JDK 15. 
  • Pratinjau kelas tertutup. Bersama dengan antarmuka, kelas tersegel membatasi kelas atau antarmuka lain mana yang dapat memperluas atau mengimplementasikannya. Tujuan dari fitur ini termasuk memungkinkan penulis kelas atau antarmuka untuk mengontrol kode mana yang bertanggung jawab untuk mengimplementasikannya, menyediakan cara yang lebih deklaratif daripada pengubah akses untuk membatasi penggunaan superclass, dan mendukung arah masa depan dalam pencocokan pola dengan mendukung lengkap. analisis pola.
  • Penghapusan kode sumber dan dukungan build untuk port Solaris / SPARC, Solaris / x64, dan Linux / SPARC, yang tidak digunakan lagi untuk dihapus di JDK 14 dengan maksud untuk menghapusnya di rilis mendatang. Banyak proyek dan fitur dalam pengembangan seperti Valhalla, Loom, dan Panama memerlukan perubahan signifikan pada arsitektur CPU dan kode khusus sistem operasi. Menghentikan dukungan untuk port Solaris dan SPARC akan memungkinkan kontributor komunitas OpenJDK untuk mempercepat pengembangan fitur baru yang akan memajukan platform. Baik Solaris dan SPARC telah digantikan dalam beberapa tahun terakhir oleh OS Linux dan prosesor Intel.
  • Rekaman, yang merupakan kelas yang bertindak sebagai pembawa transparan untuk data yang tidak dapat diubah, akan dimasukkan dalam versi pratinjau kedua di JDK 15, setelah memulai debutnya sebagai pratinjau awal di JDK 14. Tujuan dari rencana tersebut termasuk merancang konstruksi berorientasi objek yang mengekspresikan agregasi nilai yang sederhana, membantu pemrogram fokus pada pemodelan data yang tidak dapat diubah daripada perilaku yang dapat diperluas, secara otomatis menerapkan metode berbasis data seperti sederajat dan penilai, dan mempertahankan prinsip-prinsip Java yang telah lama ada seperti pengetikan nominal dan kompatibilitas migrasi. Rekaman dapat dianggap sebagai tupel nominal. 
  • Tanda tangan kriptografi berdasarkan Edwards-Curve Digital Signature Algorithm (EdDSA). EdDSA adalah skema kurva elips modern dengan keunggulan dibandingkan skema tanda tangan yang ada di JDK. EdDSA hanya akan diterapkan di penyedia SunEC. EdDSA diminati karena keamanan dan kinerjanya yang lebih baik dibandingkan dengan skema tanda tangan lainnya; itu sudah didukung di pustaka crypto seperti OpenSSL dan BoringSSL.
  • Mengimplementasikan ulang DatagramSocket API lama dengan mengganti implementasi yang mendasari  API java.net.datagram.Socketdan java.net.MulticastSocketdengan implementasi yang lebih sederhana dan lebih modern yang 1. mudah untuk di-debug dan dipelihara dan 2. bekerja dengan utas virtual yang saat ini sedang dieksplorasi di Project Loom. Rencana baru ini merupakan tindak lanjut dari JDK Enhancement Proposal 353 yang menerapkan kembali Socket API lama. Implementasi saat ini java.net.datagram.Socketdan java.net.MulticastSockettanggal kembali ke JDK 1.0 dan saat IPv6 masih dalam pengembangan. Jadi implementasi saat ini  MulticastSocket mencoba untuk merekonsiliasi IPv4 dan IPv6 dengan cara yang sulit untuk dipertahankan.
  • Menonaktifkan penguncian bias secara default dan menghentikan semua opsi baris perintah terkait. Tujuannya adalah untuk menentukan kebutuhan akan dukungan berkelanjutan dari pengoptimalan sinkronisasi warisan yang mahal untuk dipelihara, yang digunakan dalam mesin virtual HotSpot untuk mengurangi overhead penguncian yang tidak terkendali. Meskipun beberapa aplikasi Java mungkin melihat kemunduran dalam kinerja dengan penguncian bias dinonaktifkan, keuntungan kinerja dari penguncian bias umumnya kurang jelas daripada sebelumnya.
  • Pratinjau kedua dari pencocokan pola untuk instanceof, mengikuti pratinjau sebelumnya di JDK 14. Pencocokan pola memungkinkan logika umum dalam sebuah program, terutama ekstraksi bersyarat dari komponen dari objek, untuk diekspresikan dengan lebih mudah dan ringkas. Bahasa seperti Haskell dan C # telah menerapkan pencocokan pola karena ringkas dan amannya.
  • Kelas tersembunyi, yaitu kelas yang tidak dapat digunakan secara langsung oleh bytecode kelas lain, dimaksudkan untuk digunakan oleh kerangka kerja yang menghasilkan kelas pada waktu proses dan yang menggunakannya secara tidak langsung melalui refleksi. Kelas tersembunyi dapat didefinisikan sebagai anggota dari sarang kontrol akses dan dapat diturunkan secara terpisah dari kelas lain. Proposal akan meningkatkan efisiensi semua bahasa di JVM dengan mengaktifkan API standar untuk menentukan kelas tersembunyi yang tidak dapat ditemukan dan memiliki siklus proses terbatas. Kerangka kerja di dalam dan di luar JDK akan dapat secara dinamis menghasilkan kelas yang dapat mendefinisikan kelas tersembunyi. Banyak bahasa yang dibangun di atas JVM mengandalkan generasi kelas dinamis untuk fleksibilitas dan efisiensi. Tujuan dari proposal ini meliputi: memungkinkan kerangka kerja untuk mendefinisikan kelas sebagai detail implementasi kerangka kerja yang tidak dapat ditemukan,jadi mereka tidak dapat dihubungkan dengan kelas lain atau ditemukan melalui refleksi; dukungan untuk memperluas sarang kontrol akses dengan kelas yang tidak dapat ditemukan; dan dukungan untuk pembongkaran kelas yang tidak dapat ditemukan secara agresif, sehingga kerangka kerja memiliki fleksibilitas untuk menentukan sebanyak yang diperlukan. Sasaran lainnya adalah menghentikan API non-standar, misc.Unsafe::defineAnonymousClass, dengan maksud tidak digunakan lagi untuk dihapus di rilis mendatang. Selain itu, bahasa Java tidak dapat diubah sebagai hasil dari proposal ini.
  • Z Garbage Collector (ZGC) beralih dari fitur eksperimental ke produk di bawah proposal ini. Terintegrasi dengan JDK 11, yang tiba pada September 2018, ZGC adalah pengumpul sampah latensi rendah yang dapat diskalakan. ZGC diperkenalkan sebagai kemampuan eksperimental karena pengembang Java memutuskan bahwa fitur dengan ukuran dan kompleksitas ini harus dimasukkan dengan hati-hati dan bertahap. Sejak itu, sejumlah peningkatan telah ditambahkan, mulai dari pembongkaran kelas secara bersamaan, penghapusan memori yang tidak digunakan, dan dukungan untuk berbagi data kelas untuk meningkatkan kesadaran NUMA dan pra-sentuh tumpukan multi-utas. Selain itu, ukuran heap maksimum telah ditingkatkan dari empat terabyte menjadi 16 terabyte. ZGC menangani masalah kinerja dalam aplikasi yang melibatkan data dalam jumlah besar, seperti pembelajaran mesin,di mana pengguna ingin memastikan bahwa pemrosesan data tidak akan mengalami ketidakpastian atau jeda yang lama karena pengumpulan sampah. Platform yang didukung termasuk Linux, Windows, dan MacOS.
  • Blok teks, yang dipratinjau di JDK 14 dan JDK 13, dimaksudkan untuk menyederhanakan tugas penulisan program Java dengan membuatnya mudah untuk mengekspresikan string yang menjangkau beberapa baris kode sumber, sambil menghindari urutan pelolosan dalam kasus umum. Blok teks adalah literal string multi-baris yang menghindari kebutuhan sebagian besar urutan pelolosan, secara otomatis memformat string dengan cara yang dapat diprediksi, dan menawarkan kontrol pengembang atas format yang diinginkan. Tujuan dari proposal blok teks adalah meningkatkan keterbacaan string dalam program Java yang menunjukkan kode yang ditulis dalam bahasa non-Java. Tujuan lainnya adalah untuk mendukung migrasi dari string literal dengan menetapkan bahwa setiap konstruksi baru dapat mengekspresikan rangkaian string yang sama sebagai string literal, menafsirkan urutan escape yang sama, dan dimanipulasi dengan cara yang sama seperti string literal.Pengembang OpenJDK berharap untuk menambahkan urutan escape untuk mengelola ruang putih eksplisit dan kontrol baris baru.
  • Pengumpul sampah dengan waktu jeda rendah Shenandoah akan menjadi fitur produksi dan keluar dari tahap percobaan. Itu telah diintegrasikan ke dalam JDK 12 setahun yang lalu.
  • Penghapusan Nashorn, yang memulai debutnya di JDK 8 pada Maret 2014, namun sejak itu menjadi usang oleh teknologi seperti GraalVM. Proposal OpenJDK 15 meminta penghapusan Nashorn API dan alat baris perintah jjs yang digunakan untuk menjalankan Nashorn.
  • Penghentian mekanisme Aktivasi RMI, untuk penghapusan di masa mendatang. Mekanisme Aktivasi RMI adalah bagian usang dari RMI yang telah opsional sejak Java 8. Aktivasi RMI membebankan beban pemeliharaan yang berkelanjutan. Tidak ada bagian lain dari RMI yang akan dihentikan.