Saatos genep bulan pangwangunan, Oracle nyebarkeun platform Java SE 23 (Java Platform, Standard Edition 23), anu ngagunakeun proyék OpenJDK open-source salaku palaksanaan rujukan. Iwal panyabutan sababaraha fitur luntur, Java SE 23 mertahankeun kasaluyuan mundur kalawan release saméméhna tina platform Java - lolobana proyék Java ditulis saméméhna bakal jalan tanpa parobahan lamun ngajalankeun dina versi anyar. Siap-pasang ngawangun Java SE 22 (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 23 pinuh open source handapeun lisénsi GPLv2, kalawan GNU ClassPath iwal ngamungkinkeun linking dinamis jeung produk komérsial.
Java SE 23 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 tambahan pikeun cabang LTS Java SE 8 bakal dugi ka 2030, sareng Java SE 11 dugi ka 2032.
Diantara 23 inovasi anu diajukeun dina Java SE:
- Modeu generatif operasi tina ZGC (Generasi Z Sampah Kolektor) diaktipkeun sacara standar, ngagunakeun ngolah misah tina "heubeul" jeung "ngora" objék, nu ngaronjatkeun efisiensi meresihan up anyar dijieun objék kalawan umur pondok. Ngagunakeun Generational ZGC ngurangan résiko lapak salila alokasi sumberdaya, ngurangan beban CPU jeung konsumsi memori salila ngumpulkeun sampah. Nguji Generational ZGC sareng Apache Cassandra 4 nunjukkeun paningkatan 4x dina throughput kalayan ukuran tumpukan tetep sareng réduksi saparapat dina ukuran tumpukan kalayan throughput konstan.
- JavaDoc parantos nambihan dukungan pikeun ngagunakeun Markdown pikeun ngadokumentasikeun kode dina koméntar, anu tiasa dianggo tibatan campuran HTML sareng tag JavaDoc @.

- Mékanisme pencocokan pola parantos ditingkatkeun kalayan dukungan awal pikeun ngagunakeun jinis primitif (int, byte, char, sareng jinis dasar non-obyek sanés) dina sagala jinis témplat, dina pernyataan "instanceof", sareng dina blok "switch". switch (x.getStatus ()) {kasus 0 -> "oke"; kasus 1 -> "warning"; kasus 2 -> "kasalahan"; case int i -> "status teu dipikanyaho: " + i; } lamun (i instanceof byte b) { … b … }
- Ditambahkeun dukungan awal pikeun ngagunakeun hiji pernyataan "modul impor M" pikeun ngimpor sadaya bungkusan anu diékspor ku modul anu ditangtukeun sakaligus. Parobihan sacara signifikan nyederhanakeun panggunaan deui perpustakaan modular, ngamungkinkeun anjeun ngalebetkeun perpustakaan sareng kelas tanpa nangtukeun tempatna dina hirarki pakét. Contona, nangtukeun "module impor java.base" bakal ngimpor sakabéh 54 bungkusan kaasup dina modul java.base, nu saméméhna bakal kudu disebutkeun misah ("import java.io.*", "impor java.util.* ” jsb.).
A palaksanaan awal kadua API Kelas-File diusulkeun pikeun parsing, generating, jeung ngarobah payil 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);
- Sawangan kadalapan Véktor API nyadiakeun fungsi pikeun itungan vektor nu dieksekusi 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.
- format ditambahkeun, printf, readPassword jeung métode readLine ka java.io.Console kelas pikeun pormat, mintonkeun jeung maca téks dumasar kana Lokalisasi dipilih. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", anyar Tanggal()) 2024-mai-16 jeudi
- Palaksanaan sawangan kadua tina API Stream ngalegaan 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]]
- Nambahkeun palaksanaan awal katilu tina kelas anu dinyatakeun 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 sawangan kadua fitur anu ngamungkinkeun konstruktor nangtukeun éksprési saméméh nelepon super(...), dipaké pikeun eksplisit nelepon constructor kelas indungna ti constructor kelas diwariskeun lamun ekspresi maranéhanana henteu ngarujuk kana conto dijieun ku constructor nu. class Outer { batal halo () { System.out.println ("Halo"); }kelas Batin {Batin() {halo(); super(); } } }
- Nambahkeun palaksanaan sawangan katilu tina Scoped Values, ngamungkinkeun data anu teu tiasa dirobih dibagi kana utas sareng data anu disilihtukeurkeun sacara éfisién 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.
- Sawangan katilu tina Structured Concurrency API parantos diusulkeun pikeun nguji, nyederhanakeun pamekaran aplikasi multi-threaded ku ngolah sababaraha pancén anu dijalankeun dina benang anu béda salaku blok tunggal.
- Métode aksés memori éksternal (luar JVM) disadiakeun ku kelas sun.misc.Unsafe geus deprecated sarta dijadwalkeun pikeun ngaleupaskeun. Pikeun ngakses memori kaluar-numpuk jeung interaksi jeung kode éksternal, disarankeun pikeun ngagunakeun VarHandle API jeung FFM (Fungsi Asing & Mémori) API.
Salaku tambahan, urang tiasa nyatet publikasi pembaruan kana platform pikeun nyiptakeun aplikasi nganggo antarmuka grafis JavaFX 23 sareng kalebet kompiler GraalVM JIT dina Oracle JDK 23 utama.
Ogé dibere pelepasan anyar tina mesin virtual universal GraalVM, nu ngarojong ngajalankeun aplikasi dina JavaScript (Node.js), Python, Ruby, R, sagala basa keur JVM (Java, Scala, Clojure, Kotlin) jeung basa nu LLVM bitcode bisa dihasilkeun (C, C++, Rust). Salian ngarojong JDK 23, versi anyar ngaoptimalkeun konsumsi memori sareng ukuran kode laksana, jeung nyadiakeun rojongan lengkep pikeun parabot pikeun embedding Python jeung WebAssembly kana kode Java maké kompilasi JIT.
sumber: opennet.ru

