Ngaleupaskeun platform Java SE 22 sareng OpenJDK 22 palaksanaan rujukan kabuka

Saatos genep bulan pangwangunan, Oracle parantos ngarilis Java SE 22 (Java Platform, Standard Edition 22), anu ngagunakeun proyék open source OpenJDK salaku palaksanaan rujukan. Iwal ngaleupaskeun sababaraha fitur deprecated, Java SE 22 mertahankeun kasaluyuan mundur kalawan release saméméhna tina platform Java-proyék Java paling ditulis saméméhna bakal tetep jalan tanpa modifikasi lamun ngajalankeun dina versi anyar. Wangunan Java SE 22 anu tiasa dipasang (JDK, JRE, sareng Server JRE) disiapkeun pikeun Linux (x86_64, AArch64), Windows (x86_64), sareng macOS (x86_64, AArch64). Dimekarkeun ku proyék OpenJDK, palaksanaan rujukan Java 22 dibuka sapinuhna dina lisénsi GPLv2 kalawan iwal GNU ClassPath pikeun ngidinan linking dinamis kana produk komérsial.

Java SE 22 digolongkeun salaku sékrési pangrojong biasa sareng bakal terus nampi apdet dugi ka sékrési salajengna. Cabang Long Term Support (LTS) kedahna Java SE 21 atanapi Java SE 17, anu masing-masing bakal nampi apdet dugi ka 2031 sareng 2029 (umumna sayogi dugi ka 2028 sareng 2026). Dukungan umum pikeun cabang LTS Java SE 11 réngsé Séptémber kamari, tapi dukungan anu diperpanjang bakal diteruskeun dugi ka 2032. Dukungan tambahan pikeun cabang LTS Java SE 8 bakal diteruskeun dugi ka 2030.

Hayu urang ngingetan yén dimimitian ku sékrési Java 10, proyék pindah ka prosés pangwangunan anyar, implying siklus pondok pikeun formasi release anyar. Pungsi anyar ayeuna dikembangkeun dina hiji cabang master anu terus diropéa, anu kalebet parobihan anu siap-siap sareng cabang mana cabangna unggal genep bulan pikeun nyaimbangkeun sékrési énggal.

Fitur anyar dina Java 22 kalebet:

  • Koléktor sampah G1 kalebet dukungan pikeun pinning daérah, anu ngamungkinkeun anjeun samentawis ngalereskeun lokasi objék Java dina mémori pikeun ngahindarkeun aranjeunna dipindahkeun ku tukang sampah sareng ngamungkinkeun rujukan pikeun objék ieu aman diliwatan antara Java sareng kode asli. Pinning ngidinan Anjeun pikeun ngurangan latency sarta ngahindarkeun nganonaktipkeun koleksi sampah nalika executing wewengkon kritis JNI (Java Native Interface) kalawan kode asli (samentara executing bagian ieu, JVM teu kudu mindahkeun objék kritis pakait sareng aranjeunna dina urutan ulah kaayaan lomba). Pinning ngaleungitkeun objék kritis tina panempoan tukang sampah, anu tiasa teras-terasan ngabersihkeun daérah anu henteu dipasang.
  • A fitur awal geus ditambahkeun pikeun ngidinan éksprési bisa dieusian dina constructors saméméh nelepon super(...), dipaké pikeun eksplisit nelepon hiji constructor kelas indungna ti hiji constructor kelas diwariskeun lamun eta ekspresi teu ngarujuk kana hiji conto dijieun ku constructor nu. class Outer { batal halo () { System.out.println ("Halo"); }kelas Batin {Batin() {halo(); super(); } } }
  • FFM (Fungsi Asing & Mémori) API geus stabilized, sahingga interaksi program Java kalawan kode éksternal sarta data ku nelepon fungsi ti perpustakaan éksternal sarta aksés memori luar JVM, tanpa resorting ka maké JNI (Java Native Interface).
  • Rojongan pikeun variabel anu teu namina sareng cocog pola parantos diaktipkeun - tibatan variabel sareng pola anu henteu kapake tapi diperyogikeun nalika nelepon, anjeun ayeuna tiasa netepkeun karakter "_". // éta String pageName = switch (kaca) {bisi GitHubIssuePage (var url, eusi var, var Tumbu, int issueNumber) -> "masalah #" + issueNumber; ...}; // ayeuna anjeun tiasa String pageName = switch (kaca) {bisi GitHubIssuePage (_, _, _, int issueNumber) -> "masalah #" + issueNumber; };
  • Palaksanaan awal Kelas-File API diusulkeun pikeun nga-parsing, ngahasilkeun, sareng ngarobih file kelas Java. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bait); bait [] newBytes = cf.build (classModel.thisClass ().asSymbol (), classBuilder -> {pikeun (ClassElement ce: classModel) {lamun (! (ce instanceof MethodModel mm && mm.methodName (). stringValue (). startsWith("debug"))) {classBuilder.with(ce);
  • Utilitas java nyadiakeun kamampuhan pikeun ngajalankeun program Java, disadiakeun dina bentuk sababaraha file kode atawa perpustakaan kelas precompiled, tanpa misah compile file ieu sarta tanpa ngonpigurasikeun sistem ngawangun. Fitur anyar ngagampangkeun ngajalankeun program dimana kodeu kelas anu béda dipisahkeun kana file anu misah. Prog.java: kelas Prog {publik statik batal utama (String [] args) { Helper.run (); }} Helper.java: class Helper {statik batal ngajalankeun () { System.out.println ("Halo!"); }}

    Contona, pikeun ngajalankeun program diwangun ku dua file "Prog.java" jeung "Helper.java" ayeuna cukup pikeun ngajalankeun "java Prog.java", nu bakal compile kelas Prog, nangtukeun hiji rujukan ka kelas Helper, Panggihan tur kompilasi file Helper java sareng nelepon metodeu utama.

  • Ditambahkeun hiji palaksanaan awal kadua String Citakan, dilaksanakeun salian literal string jeung blok téks. String template ngidinan Anjeun pikeun ngagabungkeun téks kalawan éksprési diitung sarta variabel tanpa ngagunakeun + operator. Substitusi éksprési dilumangsungkeun maké substitusi \{..}, sarta pawang husus bisa disambungkeun pikeun pariksa correctness tina nilai diganti. Contona, mesin SQL mariksa nilai-nilai anu digantikeun kana kode SQL sareng ngabalikeun obyék java.sql.Statement salaku kaluaran, sedengkeun prosésor JSON ngawaskeun kabeneran substitusi JSON sareng ngabalikeun JsonNode. String query = "PILIH * TI Jalma p WHERE p." + harta + "="" + nilai + "'"; // was Pernyataan query = SQL. // janten
  • A sawangan katujuh tina Véktor API geus ditambahkeun, nyadiakeun fungsi pikeun itungan vektor anu dipigawé maké instruksi vektor on x86_64 na prosesor AArch64 sarta ngidinan operasi pikeun dilarapkeun sakaligus ka sababaraha nilai (SIMD). Beda sareng kamampuan anu disayogikeun dina kompiler HotSpot JIT pikeun otomatis-vektorisasi operasi skalar, API anyar ngamungkinkeun sacara eksplisit ngadalikeun vektorisasi pikeun ngolah data paralel.
  • A palaksanaan awal tina API Stream nambahan geus ditambahkeun nu ngarojong nangtukeun operasi panengah anjeun sorangan, nu bisa jadi mangpaat dina kasus dimana aya diwangun-di operasi panengah teu cukup pikeun transformasi data nu dipikahoyong. Pawang pribumi dihubungkeun nganggo operasi perantara anyar Stream:: gather(Gatherer), anu ngolah elemen aliran ku cara nerapkeun panangan anu dikhususkeun ku pangguna pikeun aranjeunna. jshell> Stream.of(1,2,3,4,5,6,7,8,9).ngumpulkeun(WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • Versi kadua tina API ékspérimén pikeun Structured Concurrency geus diajukeun pikeun nguji, nu simplifies ngembangkeun aplikasi multi-threaded ku ngolah sababaraha pancén dieksekusi dina threads béda salaku blok tunggal.
  • Nambahkeun palaksanaan awal kadua kelas anu didéklarasikeun sacara implisit sareng conto anu teu namina tina metode "utama", anu tiasa ngaleungitkeun deklarasi umum / statik, ngalangkungan sababaraha argumen, sareng éntitas sanés anu aya hubunganana sareng deklarasi kelas. // was public class HelloWorld {public static void main (String [] args) { System.out.println ("Hello world!"); } } // ayeuna anjeun tiasa ngabatalkeun main () { System.out.println ("Halo, Dunya!"); }
  • Nambahkeun palaksanaan sawangan kadua pikeun Scoped Values, ngamungkinkeun data anu teu tiasa dirobih dibagi kana utas sareng data anu disilihtukeurkeun sacara efisien antara benang anak (nilai diwariskeun). Scoped Values ​​nuju dikembangkeun pikeun ngagentos mékanisme variabel thread-lokal sareng langkung éfisién nalika nganggo jumlah utas virtual anu ageung (rébuan atanapi jutaan utas). Beda utama antara Nilai Scoped jeung variabel thread-lokal nyaéta yén urut ditulis sakali, teu bisa dirobah dina mangsa nu bakal datang, sarta tetep sadia ngan pikeun durasi palaksanaan thread urang.
  • Kolektor sampah Paralel parantos ningkatkeun kamampuan nalika damel sareng objék anu ageung. Optimasi ngamungkinkeun sababaraha tés kalayan susunan ageung objék pikeun ngirangan reureuh sateuacan ngamimitian milarian hiji obyék ku 20%.

Salaku tambahan, anjeun tiasa nyatet publikasi apdet kana platform pikeun nyiptakeun aplikasi nganggo antarmuka grafis JavaFX 22.

sumber: opennet.ru

Tambahkeun komentar