Rilis platform Java SE 22 lan implementasi referensi mbukak OpenJDK 22

Sawise nem sasi pembangunan, Oracle wis ngeculake platform Java SE 22 (Java Platform, Standard Edition 22), sing nggunakake proyek open source OpenJDK minangka implementasi referensi. Kajaba mbusak sawetara fitur sing ora digunakake, Java SE 22 njaga kompatibilitas mundur karo platform Java sing diluncurake sadurunge-proyèk Jawa sing paling ditulis sadurunge isih bisa digunakake tanpa modifikasi nalika diluncurake ing versi anyar. Bangun Java SE 22 (JDK, JRE, lan Server JRE) sing bisa diinstal disiapake kanggo Linux (x86_64, AArch64), Windows (x86_64), lan macOS (x86_64, AArch64). Dikembangake dening proyek OpenJDK, implementasi referensi Java 22 minangka sumber terbuka kanthi lisensi GPLv2 kanthi pangecualian GNU ClassPath supaya bisa nyambung dinamis menyang produk komersial.

Java SE 22 diklasifikasikake minangka rilis dhukungan biasa lan bakal terus nampa nganyari nganti rilis sabanjure. Cabang Dhukungan Jangka Panjang (LTS) kudune Java SE 21 utawa Java SE 17, sing bakal nampa nganyari nganti 2031 lan 2029 (umume kasedhiya nganti 2028 lan 2026). Dhukungan umum kanggo cabang LTS Java SE 11 rampung September kepungkur, nanging dhukungan tambahan bakal terus nganti 2032. Dhukungan lengkap kanggo cabang LTS Java SE 8 bakal terus nganti 2030.

Ayo kita ngelingake yen wiwit rilis Java 10, proyek kasebut ngalih menyang proses pangembangan anyar, tegese siklus sing luwih cendhek kanggo pambentukan rilis anyar. Fungsi anyar saiki dikembangake ing siji cabang master sing terus dianyari, sing kalebu owah-owahan sing wis siap lan cabang-cabang sing dicabang saben nem sasi kanggo nyetabilake rilis anyar.

Fitur anyar ing Java 22 kalebu:

  • Penagih sampah G1 kalebu dhukungan kanggo pinning wilayah, sing ngijini sampeyan kanggo sementara pin lokasi obyek Jawa ing memori supaya ora dipindhah dening tukang sampah lan ngidini referensi kanggo obyek kasebut bisa dilewati kanthi aman antarane Jawa lan kode asli. Pinning ngijini sampeyan kanggo ngurangi latensi lan supaya ora mateni koleksi sampah nalika nglakokakΓ© wilayah kritis JNI (Jawa Native Interface) karo kode native (nalika nglakokakΓ© bagean iki, JVM ngirim ora mindhah obyek kritis gadhah kanggo ngindhari kahanan lomba). Pinning mbusak obyek kritis saka tampilan kolektor uwuh, kang bisa terus kanggo ngresiki munggah wilayah unpinned.
  • Fitur awal wis ditambahake kanggo ngidini ekspresi bisa ditemtokake ing konstruktor sadurunge nelpon super(...), digunakake kanggo nyebut konstruktor kelas induk saka konstruktor kelas sing diwarisake yen ekspresi kasebut ora nuduhake conto sing digawe dening konstruktor. class Outer {void hello() { System.out.println("Halo"); } kelas Inner { Inner() { hello(); super(); } } }
  • API FFM (Fungsi & Memori Asing) wis stabil, ngidini interaksi program Java karo kode lan data eksternal kanthi nelpon fungsi saka perpustakaan eksternal lan ngakses memori ing njaba JVM, tanpa nggunakake JNI (Java Native Interface).
  • Dhukungan kanggo variabel sing ora dijenengi lan pencocokan pola wis diaktifake - tinimbang variabel lan pola sing ora digunakake nanging perlu nalika nelpon, sampeyan saiki bisa nemtokake karakter "_". // was String pageName = switch (page) {case GitHubIssuePage(var url, var content, var links, int issueNumber) -> "ISSUE #" + issueNumber; ...}; // saiki sampeyan bisa String pageName = ngalih (kaca) {case GitHubIssuePage(_, _, _, int issueNumber) -> "MASA #" + issueNumber; };
  • Implementasi awal saka Class-File API diusulake kanggo parsing, ngasilake, lan ngowahi file kelas Java. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(byte); byte [] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> {kanggo (ClassElement ce : classModel) {yen (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). startsWith("debug"))) {classBuilder.with(ce);}}});
  • Utilitas java nyedhiyakake kemampuan kanggo mbukak program Java, diwenehake ing sawetara file kode utawa perpustakaan kelas sing wis dikompilasi, tanpa nyusun file kasebut kanthi kapisah lan tanpa ngonfigurasi sistem mbangun. Fitur anyar nggampangake mbukak program sing kode kelas sing beda-beda dipisahake dadi file sing kapisah. Prog.java: class Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Helper { static void run() { System.out.println("Hello!"); }}

    Contone, kanggo mbukak program sing dumadi saka rong file "Prog.java" lan "Helper.java" saiki cukup kanggo mbukak "java Prog.java", kang bakal ngumpulake kelas Prog, nemtokake referensi kanggo kelas Helper, golek lan ngumpulake file Helper.java lan nelpon metode utama.

  • Nambahake implementasi awal kapindho saka String Templates, dileksanakake saliyane literal string lan blok teks. Cithakan string ngidini sampeyan nggabungake teks karo ekspresi lan variabel sing diwilang tanpa nggunakake operator +. Substitusi ekspresi ditindakake kanthi nggunakake substitusi \{..}, lan panangan khusus bisa disambungake kanggo mriksa bener saka nilai sing diganti. Contone, mesin SQL mriksa nilai sing diganti menyang kode SQL lan ngasilake obyek java.sql.Statement minangka output, nalika prosesor JSON ngawasi bener saka substitusi JSON lan ngasilake JsonNode. String query = "PILIH * FROM Wong p WHERE p." + properti + "="" + nilai + "'"; // was Statement query = SQL.""" SELECT * FROM Person p WHERE p.\{property} = '\{value}'"""; // dadi
  • Pratinjau kaping pitu saka Vector API wis ditambahake, nyedhiyakake fungsi kanggo petungan vektor sing ditindakake kanthi nggunakake instruksi vektor ing prosesor x86_64 lan AArch64 lan ngidini operasi bisa diterapake bebarengan ing sawetara nilai (SIMD). Boten kados kapabilitas kasedhiya ing kompiler HotSpot JIT kanggo otomatis-vektorisasi operasi skalar, API anyar ndadekake iku bisa kanggo tegas kontrol vectorization kanggo Processing data podo.
  • Implementasi awal saka API Stream lengkap wis ditambahake sing ndhukung netepake operasi penengah dhewe, kang bisa migunani ing kasus sing ana dibangun ing operasi penengah ora cukup kanggo transformasi data sing dikarepake. Pengendali asli disambungake nggunakake operasi penengah anyar Stream:: kumpul (Gatherer), sing ngolah unsur stream kanthi nggunakake pawang sing ditemtokake pangguna. jshell> Stream.of(1,2,3,4,5,6,7,8,9).kumpul(WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • Versi kapindho API eksperimen kanggo Structured Concurrency wis diusulake kanggo nyoba, sing nyederhanakake pangembangan aplikasi multi-threaded kanthi ngolah pirang-pirang tugas sing ditindakake ing benang sing beda-beda minangka blok siji.
  • Nambahake implementasi awal kapindho kelas sing diumumake sacara implisit lan conto sing ora dijenengi saka metode "utama", sing bisa ngilangi deklarasi umum / statis, ngliwati macem-macem argumen, lan entitas liyane sing ana gandhengane karo deklarasi kelas. // was public class HelloWorld {public static void main(String[] args) { System.out.println("Hello world!"); } } // saiki sampeyan bisa mbatalake main () { System.out.println ("Hello, World!"); }
  • Nambahake implementasi pratinjau kaping pindho saka Scoped Values, ngidini data sing ora bisa diganti bisa dienggo bareng ing benang lan data sing diijolke kanthi efisien ing antarane benang anak (nilai diwarisake). Scoped Values ​​dikembangake kanggo ngganti mekanisme variabel lokal lan luwih efisien nalika nggunakake benang virtual sing akeh banget (ewonan utawa mayuta-yuta benang). Bentenipun utama antarane Scoped Values ​​lan variabel thread-lokal yaiku sing mantan ditulis sapisan, ora bisa diganti ing mangsa ngarep, lan tetep kasedhiya mung kanggo durasi eksekusi thread.
  • Penagih sampah Paralel wis ningkatake kinerja nalika nggarap obyek sing akeh. Optimasi ndadekake sawetara tes kanthi susunan obyek gedhe kanggo nyuda wektu tundha sadurunge miwiti nggoleki obyek kanthi 20%.

Kajaba iku, sampeyan bisa nyathet publikasi nganyari menyang platform kanggo nggawe aplikasi kanthi antarmuka grafis JavaFX 22.

Source: opennet.ru

Add a comment