Keluaran platform Java SE 22 dan pelaksanaan rujukan terbuka OpenJDK 22

Selepas enam bulan pembangunan, Oracle mengeluarkan Java SE 22 (Platform Java, Edisi Standard 22), yang menggunakan projek OpenJDK sumber terbuka sebagai pelaksanaan rujukan. Dengan pengecualian penyingkiran beberapa ciri usang, Java SE 22 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 22 (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 22 adalah sumber terbuka sepenuhnya di bawah lesen GPLv2, dengan pengecualian GNU ClassPath membenarkan pautan dinamik dengan produk komersial.

Java SE 22 diklasifikasikan sebagai keluaran sokongan biasa dan akan terus menerima kemas kini sehingga keluaran seterusnya. Cawangan Sokongan Jangka Panjang (LTS) hendaklah Java SE 21 atau Java SE 17, yang masing-masing akan menerima kemas kini sehingga 2031 dan 2029 (biasanya tersedia sehingga 2028 dan 2026). Sokongan awam untuk cawangan LTS Java SE 11 berakhir pada September lalu, tetapi sokongan lanjutan akan diteruskan sehingga 2032. Sokongan lanjutan untuk cawangan LTS Java SE 8 akan diteruskan sehingga 2030.

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 22 termasuk:

  • Pengumpul sampah G1 termasuk sokongan untuk penyematan wilayah, yang membolehkan anda membetulkan sementara lokasi objek Java dalam ingatan untuk mengelakkannya dialihkan oleh pengumpul sampah dan untuk membenarkan rujukan kepada objek ini dihantar dengan selamat antara Java dan kod asli. Semat membolehkan anda mengurangkan kependaman dan mengelak daripada melumpuhkan kutipan sampah apabila melaksanakan kawasan kritikal JNI (Antara Muka Asli Java) dengan kod asli (semasa melaksanakan bahagian ini, JVM tidak seharusnya mengalihkan objek kritikal yang dikaitkan dengannya untuk mengelakkan keadaan perlumbaan). Semat mengalih keluar objek kritikal daripada pandangan pemungut sampah, yang boleh terus membersihkan kawasan yang tidak disematkan.
  • Ciri awal telah ditambahkan untuk membolehkan ungkapan dinyatakan dalam pembina sebelum memanggil super(...), digunakan untuk secara eksplisit memanggil pembina kelas induk daripada pembina kelas yang diwarisi jika ungkapan tersebut tidak merujuk kepada contoh yang dicipta oleh pembina. class Outer { void hello() { System.out.println("Hello"); } kelas Inner { Inner() { hello(); super(); } } }
  • API FFM (Fungsi & Memori Asing) telah distabilkan, membenarkan interaksi program Java dengan kod luaran dan data dengan memanggil fungsi daripada perpustakaan luaran dan mengakses memori di luar JVM, tanpa menggunakan JNI (Antara Muka Asli Java).
  • Sokongan untuk pembolehubah tidak dinamakan dan padanan corak telah didayakan - bukannya pembolehubah dan corak yang tidak digunakan tetapi perlu semasa memanggil, anda kini boleh menentukan aksara "_". // was String pageName = switch (page) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> β€œISSUE #” + issueNomber; ... }; // kini anda boleh String pageName = tukar (halaman) { case GitHubIssuePage(_, _, _, int issueNumber) -> β€œISSUE #” + issueNumber; };
  • Pelaksanaan awal Class-File API dicadangkan untuk menghurai, menjana dan menukar fail kelas Java. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bait); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). startsWith("debug"))) { classBuilder.with(ce); } } });
  • Utiliti java menyediakan keupayaan untuk menjalankan program Java, dibekalkan dalam bentuk beberapa fail kod atau pustaka kelas yang telah disusun sebelumnya, tanpa menyusun fail ini secara berasingan dan tanpa mengkonfigurasi sistem binaan. Ciri baharu ini memudahkan untuk menjalankan program di mana kod kelas yang berbeza dipisahkan ke dalam fail yang berasingan. Prog.java: kelas Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Helper { static void run() { System.out.println("Hello!"); } }

    Sebagai contoh, untuk menjalankan program yang terdiri daripada dua fail "Prog.java" dan "Helper.java" ia kini mencukupi untuk menjalankan "java Prog.java", yang akan menyusun kelas Prog, mentakrifkan rujukan kepada kelas Helper, cari dan susun fail Helper.java dan memanggil kaedah utama.

  • Menambah pelaksanaan awal kedua Templat Rentetan, dilaksanakan sebagai tambahan kepada literal rentetan dan blok teks. Templat rentetan membolehkan anda menggabungkan teks dengan ungkapan dan pembolehubah yang dikira tanpa menggunakan operator +. Penggantian ungkapan dijalankan menggunakan penggantian \{..}, dan pengendali khas boleh disambungkan untuk memeriksa ketepatan nilai yang diganti. Contohnya, enjin SQL menyemak nilai yang digantikan ke dalam kod SQL dan mengembalikan objek java.sql.Statement sebagai output, manakala pemproses JSON memantau ketepatan penggantian JSON dan mengembalikan JsonNode. Pertanyaan rentetan = "PILIH * DARI Orang p DI MANA p." + harta + " = '" + nilai + "'"; // was Statement query = SQL."""SELECT * FROM Person p WHERE p.\{property} = '\{value}'"""; // menjadi
  • Pratonton ketujuh Vector API telah ditambah, menyediakan fungsi untuk pengiraan vektor yang dilakukan 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.
  • Pelaksanaan awal API Strim lanjutan telah ditambahkan yang menyokong penentuan operasi perantaraan anda sendiri, yang mungkin berguna dalam kes di mana operasi perantaraan terbina dalam sedia ada tidak mencukupi untuk transformasi data yang diingini. Pengendali asli disambungkan menggunakan operasi perantaraan baharu Stream::gather(Gatherer), yang memproses elemen aliran dengan menggunakan pengendali yang ditentukan pengguna kepada mereka. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • Versi kedua API percubaan untuk Structured Concurrency telah dicadangkan untuk ujian, yang memudahkan pembangunan aplikasi berbilang benang dengan memproses berbilang tugas yang dilaksanakan dalam urutan berbeza sebagai satu blok.
  • Menambah pelaksanaan awal kedua bagi kelas yang diisytiharkan secara tersirat dan contoh tidak dinamakan kaedah "utama", yang boleh mengetepikan pengisytiharan awam/statik, menghantar pelbagai hujah dan entiti lain yang dikaitkan dengan pengisytiharan kelas. // ialah kelas awam HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // kini anda boleh membatalkan main() { System.out.println("Hello, World!"); }
  • Menambahkan pelaksanaan pratonton kedua bagi Nilai Skop, membenarkan data tidak berubah untuk dikongsi merentas urutan dan data ditukar dengan cekap antara urutan anak (nilai diwarisi). Nilai Skop sedang dibangunkan untuk menggantikan mekanisme pembolehubah setempat-benang dan lebih cekap apabila menggunakan bilangan benang maya yang sangat besar (beribu-ribu atau berjuta-juta benang). Perbezaan utama antara Nilai Skop dan pembolehubah setempat-benang ialah yang pertama ditulis sekali, tidak boleh diubah pada masa hadapan dan kekal tersedia hanya untuk tempoh pelaksanaan utas.
  • Pengumpul sampah Selari telah meningkatkan prestasi apabila bekerja dengan susunan objek yang besar. Pengoptimuman membolehkan dalam beberapa ujian dengan susunan objek yang besar untuk mengurangkan kelewatan sebelum mula mencari objek sebanyak 20%.

Selain itu, anda boleh ambil perhatian penerbitan kemas kini pada platform untuk mencipta aplikasi dengan antara muka grafik JavaFX 22.

Sumber: opennet.ru

Tambah komen