Rilis Java SE 14

Setelah enam bulan pengembangan, Oracle dirilis атформу Jawa SE 14 (Platform Java, Edisi Standar 14), proyek OpenJDK sumber terbuka digunakan sebagai implementasi referensi. Java SE 14 mempertahankan kompatibilitas dengan rilis platform Java sebelumnya; semua proyek Java yang ditulis sebelumnya akan berfungsi tanpa perubahan saat diluncurkan di bawah versi baru. Build Java SE 14 yang siap diinstal (JDK, JRE, dan Server JRE) siap untuk Linux (x86_64), Windows dan macOS. Implementasi referensi yang dikembangkan oleh proyek OpenJDK Java 14 sepenuhnya open source di bawah lisensi GPLv2, dengan pengecualian GNU ClassPath yang memungkinkan tautan dinamis dengan produk komersial.

Java SE 14 tergolong rilis dukungan reguler dan akan terus menerima pembaruan hingga rilis berikutnya. Cabang Dukungan Jangka Panjang (LTS) seharusnya adalah Java SE 11, yang akan terus menerima pembaruan hingga tahun 2026. Cabang LTS Java 8 sebelumnya akan didukung hingga Desember 2020. Rilis LTS berikutnya dijadwalkan pada September 2021. Izinkan kami mengingatkan Anda bahwa dimulai dengan rilis Java 10, proyek beralih ke proses pengembangan baru, yang menyiratkan siklus yang lebih pendek untuk pembentukan rilis baru. Fungsionalitas baru kini dikembangkan dalam satu cabang master yang terus diperbarui, yang mencakup perubahan siap pakai dan cabang mana yang dicabangkan setiap enam bulan untuk menstabilkan rilis baru.

Dari inovasi Java 14 satu bisa tanda:

  • Menambahkan dukungan eksperimental pencocokan pola di operator “instanceof”, yang memungkinkan Anda segera menentukan variabel lokal untuk mengakses nilai yang dicentang. Misalnya, Anda dapat langsung menulis “if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” tanpa secara eksplisit mendefinisikan “String s = (String) obj”.

    Dulu:

    if (obj instanceof Grup) {
    Grup grup = (Grup)obj;
    var entri = grup.getEntries();
    }

    Sekarang Anda dapat melakukannya tanpa definisi "Grup grup = (Grup) objek":

    if (obj instanceof Grup grup) {
    var entri = grup.getEntries();
    }

  • Menambahkan dukungan eksperimental untuk kata kunci baru "catatan", yang menyediakan formulir ringkas untuk mendefinisikan kelas, memungkinkan Anda menghindari pendefinisian secara eksplisit berbagai metode tingkat rendah seperti equal(), hashCode(), dan toString() jika data disimpan hanya di bidang yang perilakunya tidak berubah. Ketika sebuah kelas menggunakan implementasi standar metode sama dengan(), hashCode() dan toString(), kelas tersebut dapat melakukannya tanpa definisi eksplisitnya:

    catatan publik Transaksi Bank (tanggal Tanggal Lokal,
    jumlah ganda
    Deskripsi string) {}

    Deklarasi ini secara otomatis akan menambahkan implementasi metode sama dengan(), hashCode() dan toString() selain metode konstruktor dan pengambil.

  • Terstandarisasi dan dukungan untuk bentuk baru ekspresi “switch” diaktifkan secara default, yang tidak memerlukan penentuan operator “break”, memungkinkan Anda untuk menggabungkan label berulang dan dapat digunakan tidak hanya sebagai operator, tetapi juga sebagai operator ekspresi.

    var log = beralih (peristiwa) {
    case PLAY -> “Pengguna telah memicu tombol putar”;
    case STOP, PAUSE -> “Pengguna perlu istirahat”;
    bawaan -> {
    Pesan string = event.toString();
    LocalDateTime sekarang = LocalDateTime.now();
    menghasilkan "Acara tidak diketahui" + pesan +
    » masuk » + sekarang;
    }
    };

  • Dukungan eksperimental yang diperluas blok teks - bentuk baru string literal yang memungkinkan Anda memasukkan data teks multi-baris ke dalam kode sumber tanpa menggunakan pelolosan karakter dan mempertahankan format teks asli di blok. Blok ini dibingkai oleh tiga tanda kutip ganda. Di Java 14, blok teks sekarang mendukung escape sequence "\s" untuk mendefinisikan spasi tunggal dan "\" untuk digabungkan dengan baris berikutnya (mengabaikan baris baru saat Anda perlu mencetak baris yang sangat panjang). Misalnya, alih-alih kode

    Rangkaian html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 telah hadir!\" » +
    "\n\t" + " » +
    "\n" + " ";

    Anda dapat menentukan:

    Tali html = """


    »Jawa 1\
    di sini!

    """;

  • Isi informasi diagnostik ketika terjadi pengecualian telah diperluas NullPointerException. Jika sebelumnya pesan error hanya mengacu pada nomor baris, kini dirinci metode mana yang menyebabkan pengecualian tersebut. Diagnostik tingkat lanjut saat ini hanya diaktifkan ketika diluncurkan dengan tanda “-XX:+ShowCodeDetailsInExceptionMessages”. Misalnya, saat menentukan tanda ini, pengecualian ada di baris

    var nama = pengguna.getLocation().getCity().getName();

    akan menghasilkan pesan

    Pengecualian di thread "utama" java.lang.NullPointerException: Tidak dapat memanggil "Location.getCity()"
    karena nilai kembalian "User.getLocation()" adalah nol
    di NullPointerExample.main(NullPointerExample.java:5):5)

    yang memperjelas bahwa metode Location.getCity() tidak dipanggil dan User.getLocation() mengembalikan null.

  • Diimplementasikan Pratinjau utilitas jpackage, yang memungkinkan Anda membuat paket untuk aplikasi Java mandiri. Utilitas ini didasarkan pada javapackager dari JavaFX dan memungkinkan Anda membuat paket dalam format asli untuk berbagai platform (msi dan exe untuk Windows, pkg dan dmg untuk macOS, deb dan rpm untuk Linux). Paket-paket tersebut mencakup semua dependensi yang diperlukan.
  • Kepada pemulung G1 ditambahkan mekanisme alokasi memori baru yang mempertimbangkan spesifikasi kerja pada sistem besar menggunakan arsitektur NUMA. Pengalokasi memori baru diaktifkan menggunakan tanda “+XX:+UseNUMA” dan dapat meningkatkan kinerja secara signifikan pada sistem NUMA.
  • Ditambahkan API untuk pemantauan kejadian JFR (JDK Flight Recorder) sambil berjalan, misalnya untuk mengatur pemantauan berkelanjutan.
  • Ditambahkan modul jdk.nio.mapmode, yang menawarkan mode baru (READ_ONLY_SYNC, WRITE_ONLY_SYNC) untuk membuat buffer byte yang dipetakan (MappedByteBuffer) yang merujuk pada memori non-volatil (NVM).
  • Diimplementasikan Pratinjau API Akses Memori Asing, memungkinkan aplikasi Java mengakses wilayah memori di luar tumpukan Java dengan aman dan efisien dengan memanipulasi abstraksi MemorySegment, MemoryAddress, dan MemoryLayout baru.
  • Diumumkan port yang tidak digunakan lagi untuk OS Solaris dan prosesor SPARC (Solaris/SPARC, Solaris/x64 dan Linux/SPARC) dengan tujuan untuk menghapus port ini di masa mendatang. Penghentian penggunaan port ini akan memungkinkan komunitas untuk mempercepat pengembangan fitur OpenJDK baru tanpa membuang waktu untuk memelihara fitur khusus Solaris dan SPARC.
  • Dihapus pengumpul sampah CMS (Concurrent Mark Sweep), yang sudah usang dua tahun lalu dan tidak dirawat (CMS sudah lama digantikan oleh pengumpul sampah G1). Di samping itu, diumumkan tidak lagi menggunakan kombinasi algoritme pengumpulan sampah ParallelScavenge dan SerialOld (dijalankan dengan opsi “-XX:+UseParallelGC -XX:-UseParallelOldGC”).
  • Dukungan eksperimental untuk pengumpul sampah ZGC (Z Garbage Collector) telah disediakan pada platform macOS dan Windows (sebelumnya hanya didukung di Linux). ZGC beroperasi dalam mode pasif, meminimalkan latensi akibat pengumpulan sampah (waktu terhenti saat menggunakan ZGC tidak melebihi 10 ms.) dan dapat bekerja dengan tumpukan kecil dan besar, mulai dari beberapa ratus megabyte hingga banyak terabyte.
  • Dihapus Toolkit dan API untuk mengompresi file JAR menggunakan algoritma Pack200.

Sumber: opennet.ru

Tambah komentar