Saatos genep bulan pamekaran, Oracle parantos ngarilis Java SE 25 (Java Platform, Standard Edition 24), anu nganggo proyék OpenJDK sumber terbuka salaku implementasi rujukanna. Iwal ti panyabutan sababaraha fitur anu teu dianggo deui, Java SE 25 ngajaga kompatibilitas mundur sareng rilis platform Java sateuacana — kalolobaan proyék Java anu ditulis sateuacanna bakal jalan teu robih nalika dijalankeun dina vérsi énggal. Wangunan Java SE 25 anu siap dipasang (JDK, JRE, sareng Server JRE) parantos disiapkeun pikeun Linux (x86_64, AArch64), Windows (x86_64) sareng macOS (x86_64, AArch64). Dikembangkeun ku proyék OpenJDK, implementasi rujukan Java SE 25 sapinuhna sumber terbuka dina lisénsi GPLv2 kalayan GNU ClassPath Exception, anu ngamungkinkeun tautan dinamis sareng produk komérsial.
Java SE 25 mangrupikeun sékrési dukungan anu diperpanjang, kalayan pembaruan diteruskeun dugi ka 2033 (umumna sayogi dugi ka Séptémber 2030). Java SE 17 sareng 21 ogé bakal terus dirojong salaku cabang dukungan jangka panjang (LTS), kalayan pembaruan diteruskeun dugi ka 2029 sareng 2031 (umumna sayogi dugi ka 2026 sareng 2028). Pangrojong tambahan pikeun cabang Java SE 8 sareng 11 LTS bakal diteruskeun dugi ka 2030 sareng 2032.
Diantara 25 fitur anyar anu diajukeun dina Java SE (1, 2, 3, 4):
- API StableValue ékspérimén geus ditambahkeun pikeun gawé bareng objék nu ngandung data immutable tur diperlakukeun salaku konstanta dina JVM. Optimasi kinerja anu sami sareng widang anu nganggo kecap konci "final" diterapkeun kana objék sapertos kitu. StableValue API misahkeun kreasi nilai konstanta tina initialization maranéhanana, ensures yén nilai hiji bisa initialized ngan sakali, ngurangan waktu ngamimitian program, sarta ngamungkinkeun optimizations ngalipet konstan saméméhna dipaké ngan dina kode JDK-internal bisa dilarapkeun ka kode pamaké. class Aplikasi {// Saméméh: // statik final UserService USERS = anyar UserService (); // Ayeuna: statik final StableValue USERS = StableValue.of(); pamaké UserService statik publik () {balik USERS.orElseSet (UserService :: anyar); }}
- Nambahkeun API ékspérimén pikeun ngodekeun sareng ngodekeun objék nganggo konci kriptografi, sertipikat, sareng daptar panyabutan sertipikat nganggo format PEM (Pivacy-Enhanced Mail).
- Rojongan pikeun nilai scoped geus ditambahkeun, sahingga pikeun babagi data immutable sakuliah threads jeung éfisién tukeur data antara threads anak (nilai diwariskeun). Nilai lingkup dirancang pikeun ngaganti variabel thread-lokal sarta leuwih efisien lamun ngagunakeun angka pisan badag tina threads virtual (rébuan atawa jutaan threads). Beda utama antara nilai scoped jeung variabel thread-lokal nyaeta aranjeunna ditulis sakali, teu bisa dirobah, sarta tetep sadia ngan pikeun durasi palaksanaan thread urang.
- API geus ditambahkeun pikeun ngagunakeun fungsi derivasi konci cryptographic (KDFs), nu ngidinan ngahasilkeun konci tambahan tina panjangna diperlukeun dumasar kana konci rusiah (misalna kecap akses) jeung hiji set data sawenang.
- Kode sareng ngawangun skrip pikeun ngadukung sistem 32-bit x86 parantos dihapus. Ngahapus dukungan pikeun sistem 32-bit x86 parantos nyederhanakeun ngawangun JDK sareng nguji infrastruktur sareng ngamungkinkeun pikeun nerapkeun fitur khusus platform tanpa nyiptakeun panangan fallback pikeun sistem 32-bit x86.
- Kamampuhan pikeun ngagunakeun hiji pernyataan "modul impor M" pikeun ngimpor sadaya bungkusan anu diékspor ku modul anu dipasihkeun parantos ditambahkeun. Parobihan ieu sacara signifikan nyederhanakeun panggunaan deui perpustakaan modular, ngamungkinkeun perpustakaan sareng kelas kalebet tanpa netepkeun posisina dina hirarki pakét. Contona, nangtukeun "module impor java.base" bakal ngimpor sakabéh 54 bungkusan nu dikandung dina modul java.base, nu saméméhna bakal merlukeun rujukan individu ("impor java.io.*," "impor java.util.*," jsb).
- Pendekatan pormat program kompak diusulkeun anu tiasa mangpaat pikeun diajar sareng ngembangkeun aplikasi leutik. Format kompak ngaleungitkeun kabutuhan pikeun ngartikeun kelas anu teu dipikabutuh, otomatis ngimpor API standar, sareng nyayogikeun metode input / output anu saderhana. Contona, "Halo, Dunya!" aplikasi bisa diréduksi jadi: batal utama () {IO.println ("Halo, Dunya!"); }
- Éksprési diijinkeun dina konstruktor sateuacan nyauran super(...) dianggo pikeun sacara eksplisit nyauran konstruktor kelas indungna tina jero konstruktor kelas turunan, salami ekspresi éta henteu ngarujuk kana conto anu diciptakeun ku konstruktor. class Outer { batal halo () { System.out.println ("Halo"); }kelas Batin {Batin() {halo(); super(); } } }
- A mode collector sampah generative geus ditambahkeun pikeun collector sampah Shenandoah, nu prosés heubeul jeung anyar dijieun objék misah pikeun ngaronjatkeun efisiensi ngumpulkeun objék pondok-cicing. modeu anyar ieu nyadiakeun throughput leuwih bisa diprediksi, resilience mun beban fluctuations, sarta ngurangan konsumsi memori salila ngumpulkeun sampah. The Shenandoah scheduler boga tujuan pikeun ngurangan downtime salila ngumpulkeun sampah ku ngajalankeun leuwih gawé dina paralel jeung palaksanaan aplikasi Java.
- Ahead-of-Time kelas loading na linking kreasi cache geus disederhanakeun, nyepetkeun up HotSpot JVM ngamimitian ku ngagunakeun kelas nu geus dimuat tur numbu. Operasi misah pikeun kagiatan ngarékam sareng nyiptakeun cache henteu diperyogikeun deui nalika ngamimitian; paréntah tunggal cukup: java -XX:AOTCacheOutput=app.aot -cp app.jar com.example.App …
- Nalika ngamimitian HotSpot Java VM, kamampuan ngagunakeun profil palaksanaan metode anu dicandak nalika peluncuran aplikasi sateuacana parantos dilaksanakeun. Parobihan ieu ngamungkinkeun kompiler JIT ngaliwat akumulasi statistik sareng langsung ngawitan ngahasilkeun kode asli tanpa ngantosan profilna dibangkitkeun.
- HotSpot JVM ngalaksanakeun pangrojong pikeun header obyék kompak, anu ukuranana dina sistem 64-bit parantos dikirangan tina 96 ka 64 bit (tina 12 dugi ka 8 bait). Ngurangan ukuran header ngirangan ukuran tumpukan sareng ningkatkeun efisiensi cache.
- A palaksanaan test tina API Véktor diusulkeun. Nyadiakeun fungsi pikeun itungan vektor dipigawé maké x86_64 na AArch64 processor instruksi vektor sarta ngamungkinkeun pikeun operasi simultaneous dina sababaraha nilai (SIMD). Beda sareng kompiler HotSpot JIT sacara otomatis-vektorisasi operasi skalar, API anyar ngamungkinkeun kontrol eksplisit kana vektorisasi pikeun ngolah data paralel.
- Draf kalima tina Structured Concurrency API, anu nyederhanakeun pamekaran aplikasi multithreaded ku ngarawat sababaraha pancén anu dijalankeun dina benang anu béda salaku unit tunggal, parantos dileupaskeun pikeun diuji.
- Mesin pencocokan pola ngenalkeun draf katilu fitur pikeun ngamungkinkeun panggunaan jinis primitif (int, byte, char, sareng jinis dasar non-obyek sanés) dina sagala jinis témplat, operator instanceof, sareng 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 … }
- JDK Flight Recorder (JFR) nambihan dukungan profil ékspériméntal kalayan pelacakan konsumsi sumber daya CPU anu langkung akurat dina platform. LinuxInpormasi ngeunaan waktos palaksanaan rupa-rupa struktur tiasa divisualisasikeun sacara jelas nganggo diagram FlameGraph warna.
- Ningkatkeun stabilitas JDK Flight Recorder (JFR) nalika asynchronously sampling tumpukan thread Java ku traversing tumpukan panggero ngan dina safepoints.
- JDK Flight Recorder (JFR) parantos diénggalan ku cara ngalacak sareng kamampuan waktos. Éta ngadukung ngalacak tumpukan sauran metode khusus sareng ngarékam statistik sauran metode anu tepat, nyertakeun métrik sapertos waktos palaksanaan sareng count telepon.
sumber: opennet.ru
