Keluaran Java SE 15

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

Java SE 15 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. Cawangan LTS Java 8 sebelumnya akan disokong sehingga Disember 2020. 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, termasuk perubahan sedia dibuat dan cawangan mana yang bercabang setiap enam bulan untuk menstabilkan keluaran baharu.

Daripada inovasi Java 15 seseorang boleh Mark:

  • terbina dalam sokongan untuk algoritma penciptaan tandatangan digital EdDSA (Edwards-Curve Digital Signature Algorithm). RFC 8032). Pelaksanaan EdDSA yang dicadangkan tidak bergantung pada platform perkakasan, dilindungi daripada serangan saluran sisi (masa tetap semua pengiraan dipastikan) dan prestasi lebih pantas daripada pelaksanaan ECDSA sedia ada yang ditulis dalam bahasa C, dengan tahap perlindungan yang sama. Contohnya, EdDSA menggunakan lengkung elips dengan kunci 126-bit mempamerkan prestasi yang serupa dengan ECDSA dengan lengkung elips secp256r1 dan kunci 128-bit.
  • Ditambah sokongan percubaan untuk kelas dan antara muka tertutup, 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;

    bentuk kelas tertutup awam
    membenarkan com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.simple.Square {…}

  • Ditambah sokongan untuk kelas tersembunyi yang tidak boleh digunakan secara langsung oleh bytecode kelas lain. Tujuan utama kelas tersembunyi adalah untuk digunakan dalam rangka kerja yang menjana kelas secara dinamik pada masa jalan dan menggunakannya secara tidak langsung, melalui pantulan. Kelas sedemikian biasanya mempunyai kitaran hayat yang terhad, jadi mengekalkannya untuk akses daripada kelas yang dijana secara statik adalah tidak wajar dan hanya akan membawa kepada peningkatan penggunaan memori. Kelas tersembunyi juga menghapuskan keperluan untuk API bukan standard sun.misc.Unsafe::defineAnonymousClass, yang dijadualkan untuk dialih keluar pada masa hadapan.
  • Pengumpul sampah ZGC (Z Garbage Collector) telah distabilkan dan diiktiraf sebagai sedia untuk digunakan secara meluas. ZGC beroperasi dalam mod pasif, meminimumkan kependaman disebabkan kutipan sampah sebanyak mungkin (masa gerai apabila menggunakan ZGC tidak melebihi 10 ms.) dan boleh berfungsi dengan timbunan kecil dan besar, dalam julat saiz daripada beberapa ratus megabait hingga banyak terabait.
  • Distabilkan dan didapati sedia untuk kegunaan umum
    pemungut sampah Shenandoah, bekerja dengan jeda minimum (Pengumpul Sampah Masa Jeda Rendah). Shenandoah telah dibangunkan oleh Red Hat dan terkenal kerana penggunaan algoritma yang mengurangkan masa gerai semasa pengumpulan sampah dengan menjalankan pembersihan selari dengan pelaksanaan aplikasi Java. Saiz kelewatan yang diperkenalkan oleh pemungut sampah boleh diramal dan tidak bergantung pada saiz timbunan, i.e. untuk timbunan 200 MB dan 200 GB kelewatan akan menjadi sama (jangan keluar melebihi 50 ms dan biasanya dalam 10 ms);

  • Sokongan telah distabilkan dan diperkenalkan ke dalam bahasa blok teks - bentuk literal rentetan baharu yang membolehkan anda memasukkan data teks berbilang baris dalam kod sumber tanpa menggunakan aksara melarikan diri dan mengekalkan pemformatan teks asal dalam blok. Blok itu dibingkai oleh tiga petikan berganda.

    Sebagai contoh, bukannya kod

    String html = " Β» +
    "\n\t" + " Β» +
    "\n\t\t" + " \"Java 1 ada di sini!\" Β» +
    "\n\t" + " Β» +
    "\n" + " ";

    anda boleh nyatakan:

    String html = """


    Β»Jawa 1\
    di sini!

    """;

  • Direka semula API DatagramSocket warisan. Pelaksanaan lama java.net.DatagramSocket dan java.net.MulticastSocket telah digantikan dengan pelaksanaan moden yang lebih mudah untuk nyahpepijat dan diselenggara, dan juga serasi dengan aliran maya yang dibangunkan dalam projek Dangau. Sekiranya berlaku ketidakserasian dengan kod sedia ada, pelaksanaan lama belum dialih keluar dan boleh didayakan menggunakan pilihan jdk.net.usePlainDatagramSocketImpl.
  • Pelaksanaan eksperimen kedua dicadangkan padanan corak dalam pengendali "instanceof", yang membolehkan anda mentakrifkan pembolehubah setempat dengan segera untuk mengakses nilai yang disemak. Sebagai contoh, anda boleh segera menulis "jika (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" tanpa mentakrifkan secara jelas "String s = (String) obj".

    Adakah:

    if (obj instanceof Group) {
    Kumpulan kumpulan = (Kumpulan)obj;
    entri var = group.getEntries();
    }

    Kini anda boleh melakukannya tanpa definisi "Kumpulan kumpulan = (Kumpulan) obj":

    if (obj instanceof Kumpulan kumpulan) {
    entri var = group.getEntries();
    }

  • Dicadangkan pelaksanaan percubaan kedua kata kunci "rekod", yang menyediakan bentuk padat untuk menentukan kelas, membolehkan anda mengelak daripada mentakrifkan pelbagai kaedah peringkat rendah secara eksplisit seperti equals(), hashCode() dan toString() dalam kes di mana data disimpan hanya dalam medan yang tingkah lakunya tidak berubah. Apabila kelas menggunakan pelaksanaan standard kaedah equals(), hashCode() dan toString(), ia boleh dilakukan tanpa definisi eksplisitnya:

    rekod awam Transaksi Bank(Tarikh Tempatan,
    jumlah berganda
    Perihalan rentetan) {}

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

  • Dicadangkan pratonton kedua API Akses Memori Asing, membenarkan aplikasi Java mengakses kawasan memori dengan selamat dan cekap di luar timbunan Java dengan memanipulasi abstraksi MemorySegment, MemoryAddress dan MemoryLayout baharu.
  • Dilumpuhkan dan menamatkan teknik pengoptimuman Penguncian Bias yang digunakan dalam HotSpot JVM untuk mengurangkan overhed penguncian. Teknik ini telah kehilangan kaitannya pada sistem dengan arahan atom yang disediakan oleh CPU moden, dan terlalu intensif buruh untuk diselenggara kerana kerumitannya.
  • Diumumkan mekanisme ketinggalan zaman Pengaktifan RMI, yang akan dialih keluar dalam keluaran akan datang. Adalah diperhatikan bahawa Pengaktifan RMI sudah lapuk, diturunkan kepada kategori pilihan dalam Java 8 dan hampir tidak pernah digunakan dalam amalan moden.
  • Dipadamkan Enjin JavaScript Nashorn, yang telah ditamatkan dalam Java SE 11.
  • Dialih keluar port untuk pemproses Solaris OS dan SPARC (Solaris/SPARC, Solaris/x64 dan Linux/SPARC). Mengalih keluar port ini akan membolehkan komuniti mempercepatkan pembangunan ciri OpenJDK baharu tanpa membuang masa mengekalkan ciri khusus Solaris dan SPARC.

Sumber: opennet.ru

Tambah komen