Keluaran Java SE 14

Selepas enam bulan pembangunan, Oracle dibebaskan platform Jawa SE 14 (Platform Java, Edisi Standard 14), projek OpenJDK sumber terbuka digunakan sebagai pelaksanaan rujukan. Java SE 14 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 14 sedia untuk dipasang (JDK, JRE dan Server JRE) disediakan untuk Linux (x86_64), Windows dan macOS. Pelaksanaan rujukan yang dibangunkan oleh projek OpenJDK Java 14 adalah sumber terbuka sepenuhnya di bawah lesen GPLv2, dengan pengecualian GNU ClassPath membenarkan pautan dinamik dengan produk komersial.

Java SE 14 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 14 seseorang boleh Mark:

  • Menambah sokongan percubaan 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();
    }

  • Menambah sokongan percubaan untuk kata kunci baharu "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.

  • diseragamkan dan sokongan untuk bentuk ungkapan "suis" baharu didayakan secara lalai, yang tidak memerlukan penetapan operator "putus", membolehkan anda menggabungkan label berulang dan boleh digunakan bukan sahaja dalam bentuk operator, tetapi juga sebagai ungkapan.

    var log = suis (peristiwa) {
    kes PLAY -> "Pengguna telah mencetuskan butang main";
    kes STOP, PAUSE -> "Pengguna memerlukan rehat";
    lalai -> {
    Mesej rentetan = event.toString();
    LocalDateTime sekarang = LocalDateTime.now();
    hasilkan "Acara tidak diketahui" + mesej +
    Β» log masuk Β» + sekarang;
    }
    };

  • Sokongan percubaan yang diperluaskan 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. Dalam Java 14, blok teks kini menyokong jujukan melarikan diri "\s" untuk mentakrifkan satu ruang dan "\" untuk digabungkan dengan baris seterusnya (mengabaikan baris baharu apabila anda perlu mencetak baris yang sangat panjang). 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!

    """;

  • Kandungan maklumat diagnostik apabila pengecualian berlaku telah dikembangkan NullPointerException. Sedangkan sebelum ini mesej ralat hanya merujuk kepada nombor baris, kini ia memperincikan kaedah yang menyebabkan pengecualian. Diagnostik lanjutan pada masa ini didayakan hanya apabila dilancarkan dengan bendera "-XX:+ShowCodeDetailsInExceptionMessages". Sebagai contoh, apabila menentukan bendera ini, pengecualian dalam baris

    var name = user.getLocation().getCity().getName();

    akan menghasilkan mesej

    Pengecualian dalam benang "utama" java.lang.NullPointerException: Tidak boleh memanggil "Location.getCity()"
    kerana nilai pulangan "User.getLocation()" adalah batal
    di NullPointerExample.main(NullPointerExample.java:5):5)

    yang menjelaskan bahawa kaedah Location.getCity() tidak dipanggil dan User.getLocation() mengembalikan null.

  • Dilaksanakan Pratonton utiliti jpackage, yang membolehkan anda mencipta 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.
  • Kepada pemungut sampah G1 tambah mekanisme peruntukan memori baharu yang mengambil kira spesifik bekerja pada sistem besar menggunakan seni bina NOMBOR. Pengalokasi memori baharu didayakan menggunakan bendera "+XX:+UseNUMA" dan boleh meningkatkan prestasi dengan ketara pada sistem NUMA.
  • Ditambah API untuk pemantauan semasa penerbangan acara JFR (JDK Flight Recorder), contohnya untuk mengatur pemantauan berterusan.
  • Ditambah modul jdk.nio.mapmode, yang menawarkan mod baharu (READ_ONLY_SYNC, WRITE_ONLY_SYNC) untuk mencipta penimbal bait dipetakan (MappedByteBuffer) merujuk memori tidak meruap (NVM).
  • Dilaksanakan Pratonton 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.
  • Diumumkan port ditamatkan untuk pemproses Solaris OS dan SPARC (Solaris/SPARC, Solaris/x64 dan Linux/SPARC) dengan niat untuk mengalih keluar port ini pada masa hadapan. Menamatkan port ini akan membolehkan komuniti mempercepatkan pembangunan ciri OpenJDK baharu tanpa membuang masa mengekalkan ciri khusus Solaris dan SPARC.
  • Dipadamkan pengumpul sampah CMS (Concurrent Mark Sweep), yang telah ditandakan usang dua tahun lalu dan kekal tidak diselenggara (CMS telah lama digantikan oleh pengumpul sampah G1). selain itu, diumumkan menghentikan penggunaan gabungan algoritma pengumpulan sampah ParallelScavenge dan SerialOld (jalankan dengan pilihan "-XX:+UseParallelGC -XX:-UseParallelOldGC").
  • Sokongan percubaan untuk pemungut sampah ZGC (Z Garbage Collector) telah disediakan pada platform macOS dan Windows (sebelum ini hanya disokong pada Linux). 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.
  • Dialih keluar Toolkit dan API untuk memampatkan fail JAR menggunakan algoritma Pack200.

Sumber: opennet.ru

Tambah komen