Keluaran Java SE 17

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

Java SE 17 diklasifikasikan sebagai keluaran Sokongan Jangka Panjang (LTS), yang akan terus menerima kemas kini sehingga 2029. Kemas kini untuk keluaran penting Java 16 sebelumnya telah dihentikan. Cawangan LTS Java 11 sebelum ini akan disokong sehingga 2026. Keluaran LTS seterusnya dijadualkan pada September 2024. 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.

Ciri baharu dalam Java 17 termasuk:

  • Pelaksanaan percubaan padanan corak dalam ungkapan "suis" dicadangkan, yang membenarkan penggunaan bukan nilai tepat dalam label "huruf besar", tetapi templat fleksibel yang meliputi satu siri nilai sekaligus, yang sebelum ini perlu digunakan yang menyusahkan rantaian ungkapan β€œjika...lain”. Di samping itu, "suis" mempunyai keupayaan untuk mengendalikan nilai NULL. Objek o = 123L; String diformat = suis (o) { case Integer i -> String.format("int %d", i); kes Panjang l -> String.format("panjang %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); lalai -> o.toString(); };
  • Sokongan yang stabil 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; kelas tertutup awam Permit bentuk com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • Pratonton kedua API Vektor dicadangkan, yang menyediakan fungsi untuk pengiraan vektor yang dilaksanakan menggunakan arahan vektor pada pemproses x86_64 dan AArch64 dan membenarkan operasi digunakan secara serentak pada berbilang nilai (SIMD). Tidak seperti keupayaan yang disediakan dalam pengkompil JIT HotSpot untuk auto-vektorisasi operasi skalar, API baharu memungkinkan untuk mengawal vektorisasi secara eksplisit untuk pemprosesan data selari.
  • Menambahkan pratonton API Fungsi & Memori Asing, yang membolehkan aplikasi berinteraksi dengan kod dan data di luar masa jalan Java. API baharu membolehkan anda memanggil fungsi bukan JVM dengan cekap dan mengakses memori bukan terurus JVM. Sebagai contoh, anda boleh memanggil fungsi daripada perpustakaan kongsi luaran dan mengakses data proses tanpa menggunakan JNI.
  • Enjin pemaparan macOS yang menjanakan Java 2D API, yang seterusnya menggerakkan API Swing, telah disesuaikan untuk menggunakan API grafik Logam. Platform macOS terus menggunakan OpenGL secara lalai, dan mendayakan sokongan Metal memerlukan tetapan "-Dsun.java2d.metal=true" dan sekurang-kurangnya menjalankan macOS 10.14.x.
  • Menambahkan port untuk platform macOS/AArch64 (komputer Apple berdasarkan cip Apple M1 baharu). Ciri khas port ialah sokongan untuk mekanisme perlindungan memori W^X (Write XOR Execute), di mana halaman memori tidak boleh diakses secara serentak untuk penulisan dan pelaksanaan. (kod boleh dilaksanakan hanya selepas penulisan dilumpuhkan, dan penulisan ke halaman memori hanya boleh dilakukan selepas pelaksanaan dilumpuhkan).
  • Berbalik kepada menggunakan semantik strictfp sahaja untuk ungkapan titik terapung. Sokongan untuk semantik "lalai", yang tersedia sejak keluaran Java 1.2, telah dihentikan, termasuk penyederhanaan untuk bekerja pada sistem dengan coprocessors matematik x87 yang sangat lama (selepas kemunculan arahan SSE2, keperluan untuk semantik tambahan hilang).
  • Jenis antara muka baharu kepada penjana nombor pseudorandom telah dilaksanakan, dan algoritma tambahan telah dilaksanakan untuk penjanaan nombor rawak yang lebih baik. Aplikasi diberi peluang untuk memilih algoritma untuk menjana nombor pseudorandom. Sokongan yang lebih baik untuk menjana aliran objek rawak.
  • Enkapsulasi ketat yang dikuatkuasakan bagi semua dalaman JDK, kecuali API kritikal seperti sun.misc.Unsafe. Enkapsulasi ketat menyekat percubaan daripada kod untuk mengakses kelas dalaman, kaedah dan medan. Sebelum ini, mod enkapsulasi ketat boleh dilumpuhkan menggunakan pilihan "--illegal-access=permit", tetapi ini kini telah ditamatkan. Aplikasi yang memerlukan akses kepada kelas dalaman, kaedah dan medan harus mentakrifkannya secara eksplisit menggunakan pilihan --add-opens atau atribut Add-Opens dalam fail manifes.
  • Aplikasi diberi kebolehan untuk mentakrifkan penapis penyahserikatan data, yang boleh menjadi sensitif konteks dan dipilih secara dinamik berdasarkan operasi penyahserikatan tertentu. Penapis yang ditentukan boleh digunakan pada keseluruhan mesin maya (seluruh JVM), i.e. meliputi bukan sahaja aplikasi itu sendiri, tetapi juga perpustakaan pihak ketiga yang digunakan dalam aplikasi itu.
  • Swing telah menambah kaedah javax.swing.filechooser.FileSystemView.getSystemIcon untuk memuatkan ikon besar untuk menambah baik UI pada skrin DPI Tinggi.
  • API java.net.DatagramSocket menyediakan sokongan untuk menyambung ke kumpulan Multicast tanpa memerlukan API java.net.MulticastSocket yang berasingan.
  • Utiliti IGV (Ideal Graph Visualizer) telah dipertingkatkan, menyediakan visualisasi interaktif perwakilan kod perantaraan dalam pengkompil HotSpot VM C2 JIT.
  • Dalam JavaDoc, dengan analogi dengan pengkompil javac, apabila ralat dikeluarkan, bilangan baris bermasalah dalam fail sumber dan lokasi ralat kini ditunjukkan.
  • Menambahkan sifat native.encoding, mencerminkan nama pengekodan aksara sistem (UTF-8, koi8-r, cp1251, dsb.).
  • Antara muka java.time.InstantSource telah ditambah, membenarkan manipulasi masa tanpa merujuk kepada zon waktu.
  • Menambahkan API java.util.HexFormat untuk menukar kepada perwakilan heksadesimal dan sebaliknya.
  • Mod lubang hitam telah ditambahkan pada pengkompil, yang melumpuhkan operasi penghapusan kod mati, yang boleh digunakan semasa menjalankan ujian prestasi.
  • Menambahkan pilihan "-Xlog:async" pada Runtime untuk merakam log dalam mod tak segerak.
  • Apabila mewujudkan sambungan selamat, TLS 1.3 didayakan secara lalai (sebelum ini TLS 1.2 telah digunakan).
  • API Applet usang yang diisytiharkan sebelum ini (java.applet.Applet*, javax.swing.JApplet), yang digunakan untuk menjalankan aplikasi Java dalam penyemak imbas, telah dialihkan ke kategori yang dijadualkan untuk dialih keluar (hilang kaitan selepas tamat sokongan untuk pemalam Java untuk penyemak imbas).
  • Pengurus Keselamatan, yang telah lama kehilangan kaitannya dan ternyata tidak dituntut selepas tamat sokongan untuk pemalam penyemak imbas, telah dialihkan ke kategori yang dijadualkan untuk dialih keluar.
  • Mekanisme Pengaktifan RMI telah dialih keluar, yang sudah lapuk, diturunkan kepada kategori pilihan dalam Java 8 dan hampir tidak pernah digunakan dalam amalan moden.
  • Pengkompil eksperimen yang menyokong JIT (tepat masa) untuk kompilasi dinamik kod Java untuk HotSpot JVM, serta mod kompilasi jangkaan (AOT, lebih awal) kelas ke dalam kod mesin sebelum memulakan mesin maya , telah dialih keluar daripada SDK. Pengkompil telah ditulis dalam Java dan berdasarkan kerja projek Graal. Adalah diperhatikan bahawa penyelenggaraan pengkompil memerlukan banyak tenaga kerja, yang tidak wajar apabila tiada permintaan daripada pemaju.

Sumber: opennet.ru

Tambah komen