Rilis Java SE 15

Setelah enam bulan pengembangan, Oracle dirilis Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Jawa SE 15 (Platform Java, Edisi Standar 15), proyek OpenJDK sumber terbuka digunakan sebagai implementasi referensi. Java SE 15 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 15 yang siap diinstal (JDK, JRE, dan Server JRE) siap untuk Linux (x86_64), Windows dan macOS. Implementasi referensi yang dikembangkan oleh proyek OpenJDK Java 15 sepenuhnya open source di bawah lisensi GPLv2, dengan pengecualian GNU ClassPath yang memungkinkan tautan dinamis dengan produk komersial.

Java SE 15 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 15 satu bisa tanda:

  • Bawaan dukungan untuk algoritma pembuatan tanda tangan digital EdDSA (Edwards-Curve Digital Signature Algorithm). RFC 8032). Implementasi EdDSA yang diusulkan tidak bergantung pada platform perangkat keras, dilindungi dari serangan saluran samping (waktu semua perhitungan dipastikan) dan kinerjanya lebih cepat daripada implementasi ECDSA yang ada yang ditulis dalam bahasa C, dengan tingkat perlindungan yang sama. Misalnya, EdDSA yang menggunakan kurva elips dengan kunci 126-bit menunjukkan kinerja yang serupa dengan ECDSA dengan kurva elips secp256r1 dan kunci 128-bit.
  • Ditambahkan dukungan eksperimental untuk kelas dan antarmuka tersegel, yang tidak dapat digunakan oleh kelas dan antarmuka lain untuk mewarisi, memperluas, atau mengesampingkan implementasi. Kelas tersegel juga menyediakan cara yang lebih deklaratif untuk membatasi penggunaan superkelas dibandingkan pengubah akses, berdasarkan daftar eksplisit subkelas yang diperbolehkan untuk ekstensi.

    paket com.example.geometry;

    Bentuk kelas tertutup publik
    izin com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.simple.Square {…}

  • Ditambahkan dukungan untuk kelas tersembunyi yang tidak dapat digunakan secara langsung oleh bytecode kelas lain. Tujuan utama dari kelas tersembunyi adalah untuk digunakan dalam kerangka kerja yang secara dinamis menghasilkan kelas saat runtime dan menggunakannya secara tidak langsung refleksi. Kelas-kelas seperti itu biasanya memiliki siklus hidup yang terbatas, jadi mempertahankannya agar dapat diakses dari kelas-kelas yang dihasilkan secara statis tidak dibenarkan dan hanya akan menyebabkan peningkatan konsumsi memori. Kelas tersembunyi juga menghilangkan kebutuhan akan API non-standar sun.misc.Unsafe::defineAnonymousClass, yang dijadwalkan untuk dihapus di masa mendatang.
  • Pengumpul sampah ZGC (Z Garbage Collector) telah distabilkan dan diakui siap digunakan secara luas. 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.
  • Stabil dan siap untuk penggunaan umum
    pemulung Shenandoah, bekerja dengan jeda minimal (Pengumpul Sampah Waktu Jeda Rendah). Shenandoah dikembangkan oleh Red Hat dan terkenal karena penggunaan algoritme yang mengurangi waktu henti selama pengumpulan sampah dengan menjalankan pembersihan secara paralel dengan eksekusi aplikasi Java. Besarnya penundaan yang ditimbulkan oleh pengumpul sampah dapat diprediksi dan tidak bergantung pada ukuran tumpukan, mis. untuk tumpukan 200 MB dan 200 GB penundaannya akan sama (jangan keluar melebihi 50 ms dan biasanya dalam 10 ms);

  • Dukungan telah distabilkan dan diperkenalkan ke dalam bahasa tersebut 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.

    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!

    """;

  • Didesain ulang API DatagramSocket Lama. Implementasi lama java.net.DatagramSocket dan java.net.MulticastSocket telah diganti dengan implementasi modern yang lebih mudah untuk di-debug dan dipelihara, dan juga kompatibel dengan aliran virtual yang dikembangkan dalam proyek Alat tenun. Jika ada kemungkinan ketidakcocokan dengan kode yang ada, implementasi lama belum dihapus dan dapat diaktifkan menggunakan opsi jdk.net.usePlainDatagramSocketImpl.
  • Implementasi eksperimental kedua diusulkan 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();
    }

  • Diajukan implementasi percobaan kedua dari kata kunci "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.

  • Diajukan pratinjau kedua dari Foreign-Memory Access API, memungkinkan aplikasi Java mengakses wilayah memori di luar heap Java secara aman dan efisien dengan memanipulasi abstraksi MemorySegment, MemoryAddress, dan MemoryLayout yang baru.
  • Dengan disabilitas dan tidak lagi menggunakan teknik optimasi Biased Locking yang digunakan di HotSpot JVM untuk mengurangi overhead penguncian. Teknik ini telah kehilangan relevansinya pada sistem dengan instruksi atomik yang disediakan oleh CPU modern, dan terlalu memakan waktu untuk dikelola karena kerumitannya.
  • Diumumkan mekanisme yang ketinggalan jaman Aktivasi RMI, yang akan dihapus pada rilis mendatang. Perlu dicatat bahwa Aktivasi RMI sudah ketinggalan jaman, diturunkan ke kategori opsi di Java 8 dan hampir tidak pernah digunakan dalam praktik modern.
  • Dihapus mesin JavaScript Nashorn, yang tidak digunakan lagi di Java SE 11.
  • Dihapus port untuk Solaris OS dan prosesor SPARC (Solaris/SPARC, Solaris/x64 dan Linux/SPARC). Menghapus port ini akan memungkinkan komunitas untuk mempercepat pengembangan fitur OpenJDK baru tanpa membuang waktu untuk memelihara fitur khusus Solaris dan SPARC.

Sumber: opennet.ru

Tambah komentar