Keluaran Java SE 16

Selepas enam bulan pembangunan, Oracle mengeluarkan Java SE 16 (Platform Java, Edisi Standard 16), yang menggunakan projek OpenJDK sebagai pelaksanaan rujukan. Java SE 16 mengekalkan keserasian ke belakang dengan keluaran platform Java sebelumnya; semua projek Java yang ditulis sebelum ini akan berfungsi tanpa perubahan apabila dilancarkan di bawah versi baharu. Binaan Java SE 16 yang sedia dipasang (JDK, JRE dan Server JRE) disediakan untuk Linux (x86_64, AArch64), Windows dan macOS. Dibangunkan oleh projek OpenJDK, pelaksanaan rujukan Java 16 adalah sumber terbuka sepenuhnya di bawah lesen GPLv2, dengan pengecualian GNU ClassPath membenarkan pautan dinamik dengan produk komersial.

Java SE 16 diklasifikasikan sebagai keluaran sokongan umum dan akan terus menerima kemas kini sehingga keluaran seterusnya. Cawangan Sokongan Jangka Panjang (LTS) mestilah Java SE 11, yang akan terus menerima kemas kini sehingga 2026. Keluaran LTS seterusnya dijadualkan pada September 2021. Biar kami mengingatkan anda bahawa bermula dengan keluaran Java 10, projek itu bertukar kepada proses pembangunan baharu, membayangkan kitaran yang lebih pendek untuk pembentukan keluaran baharu. Kefungsian baharu kini dibangunkan dalam satu cawangan induk yang sentiasa dikemas kini, yang merangkumi perubahan sedia dibuat dan cawangan mana yang bercabang setiap enam bulan untuk menstabilkan keluaran baharu.

Sebagai persediaan untuk keluaran baharu, pembangunan telah beralih daripada sistem kawalan versi Mercurial kepada Git dan platform pembangunan kolaboratif GitHub. Penghijrahan itu dijangka meningkatkan prestasi operasi repositori, meningkatkan kecekapan storan, menyediakan akses kepada perubahan sepanjang sejarah projek, meningkatkan sokongan untuk semakan kod dan memanfaatkan API untuk mengautomasikan aliran kerja. Di samping itu, penggunaan Git dan GitHub menjadikan projek lebih menarik kepada pemula dan pembangun yang terbiasa dengan Git.

Ciri baharu dalam Java 16 termasuk:

  • Menambah modul eksperimen jdk.incubator.vector dengan pelaksanaan Vector API, yang menyediakan fungsi untuk pengiraan vektor yang dilakukan menggunakan arahan vektor pada pemproses x86_64 dan AArch64 dan membenarkan operasi digunakan secara serentak pada berbilang nilai (SIMD). Berbeza dengan keupayaan yang disediakan dalam pengkompil JIT HotSpot untuk auto-vektorisasi operasi skalar, API baharu membolehkan anda mengawal pemvektoran secara eksplisit untuk pemprosesan data selari.
  • Kod JDK dan VM HotSpot yang ditulis dalam C++ dibenarkan menggunakan ciri yang diperkenalkan dalam spesifikasi C++14. Sebelum ini, piawaian C++98/03 dibenarkan.
  • ZGC (Z Garbage Collector), yang beroperasi dalam mod pasif dan meminimumkan kelewatan akibat pengumpulan sampah sebanyak mungkin, telah menambahkan keupayaan untuk memproses tindanan benang secara selari tanpa menjeda benang aplikasi. ZGC kini hanya mempunyai kerja yang memerlukan penggantungan, yang mempunyai kelewatan berterusan, biasanya tidak melebihi beberapa ratus mikrosaat.
  • Menambahkan sokongan untuk soket Unix (AF_UNIX) pada kelas SocketChannel, ServerSocketChannel dan java.nio.channels.
  • Port telah dilaksanakan untuk pengedaran Linux Alpine dengan musl perpustakaan C standard, yang popular dalam persekitaran untuk bekas, perkhidmatan mikro, awan dan sistem terbenam. Port yang dicadangkan dalam persekitaran sedemikian membolehkan anda menjalankan program Java seperti aplikasi biasa. Di samping itu, menggunakan jlink, anda boleh mengalih keluar semua modul yang tidak digunakan dan mencipta persekitaran minimum yang mencukupi untuk menjalankan aplikasi, yang membolehkan anda mencipta imej padat khusus aplikasi.
  • Mekanisme Metaspace Elastik telah dilaksanakan, mengoptimumkan operasi memperuntukkan dan mengembalikan memori yang diduduki oleh metadata kelas (metaspace) dalam JVM HotSpot. Penggunaan Metaspace Elastik mengurangkan pemecahan memori, mengurangkan overhed pemuat kelas, dan juga mempunyai kesan yang baik ke atas prestasi aplikasi pelayan yang berjalan lama disebabkan pemulangan memori yang lebih cepat yang diduduki oleh metadata kelas yang tidak digunakan kepada sistem pengendalian. Untuk memilih mod pelepas memori selepas memunggah kelas, pilihan β€œ-XX:MetaspaceReclaimPolicy=(seimbang|agresif|tiada)” ditawarkan.
  • Port JDK telah ditambahkan untuk sistem Windows yang berjalan pada perkakasan dengan pemproses berdasarkan seni bina AArch64.
  • Pratonton ketiga bagi API Akses Memori Asing telah dicadangkan, membenarkan aplikasi Java mengakses kawasan memori dengan selamat dan cekap di luar timbunan Java dengan memanipulasi abstraksi MemorySegment, MemoryAddress dan MemoryLayout baharu.
  • API Penghubung Asing percubaan telah dilaksanakan, menyediakan akses daripada Java kepada kod asli. Bersama-sama dengan Foreign-Memory API, antara muka pengaturcaraan baharu menjadikannya lebih mudah untuk membuat pembalut berbanding perpustakaan kongsi konvensional.
  • Menambah utiliti jpackage, yang membolehkan anda membuat pakej untuk aplikasi Java serba lengkap. Utiliti ini berdasarkan javapackager daripada JavaFX dan membolehkan anda mencipta pakej dalam format asli kepada pelbagai platform (msi dan exe untuk Windows, pkg dan dmg untuk macOS, deb dan rpm untuk Linux). Pakej termasuk semua kebergantungan yang diperlukan.
  • Enkapsulasi ketat semua dalaman JDK didayakan secara lalai, kecuali API kritikal seperti sun.misc.Unsafe. Nilai pilihan "--akses haram" kini ditetapkan kepada "menafikan" dan bukannya "membenarkan" secara lalai, yang akan menyekat percubaan daripada kod untuk mengakses kebanyakan kelas dalaman, kaedah dan medan. Untuk memintas sekatan, gunakan pilihan "-illegal-access=permit".
  • Pelaksanaan padanan corak dalam operator "instanceof" telah distabilkan, yang membolehkan anda mentakrifkan pembolehubah tempatan dengan segera untuk merujuk kepada nilai yang disemak. Sebagai contoh, anda boleh segera menulis β€œif (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” tanpa mentakrifkan β€œString s = (String) obj” secara eksplisit. Was: if (obj instanceof Group) { Kumpulan kumpulan = (Kumpulan) obj; entri var = group.getEntries(); } Kini anda boleh lakukan tanpa mentakrifkan β€œKumpulan kumpulan = (Kumpulan) obj”: if (obj instanceof Kumpulan kumpulan) { var entries = group.getEntries(); }
  • Pelaksanaan kata kunci "rekod" telah distabilkan, menyediakan bentuk padat untuk definisi kelas yang menghapuskan keperluan untuk mentakrifkan pelbagai kaedah peringkat rendah secara eksplisit seperti equals(), hashCode() dan toString() dalam kes di mana data disimpan hanya dalam bidang yang tidak berubah. Apabila kelas menggunakan pelaksanaan standard kaedah equals(), hashCode() dan toString(), ia boleh dilakukan tanpa definisi eksplisitnya: rekod awam BankTransaction(LocalDate date, double amount, String description) {}

    Pengisytiharan ini secara automatik akan menambah pelaksanaan kaedah equals(), hashCode() dan toString() sebagai tambahan kepada kaedah pembina dan getter.

  • Draf kedua dicadangkan untuk kelas tertutup dan antara muka yang tidak boleh digunakan oleh kelas dan antara muka lain untuk mewarisi, melanjutkan atau mengatasi pelaksanaan. Kelas tertutup juga menyediakan cara yang lebih deklaratif untuk menyekat penggunaan superclass daripada pengubah akses, berdasarkan penyenaraian secara eksplisit subkelas yang dibenarkan untuk sambungan. pakej com.example.geometry; kelas tertutup awam Permit bentuk com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}

Sumber: opennet.ru

Tambah komen