Java SE 23 va OpenJDK 23 chiqarildi

Olti oylik rivojlanishdan so'ng, Oracle ochiq manbali OpenJDK loyihasini mos yozuvlar dasturi sifatida ishlatadigan Java SE 23 platformasini (Java Platformasi, Standard Edition 23) nashr etdi. Ba'zi eskirgan xususiyatlarni olib tashlash bundan mustasno, Java SE 23 Java platformasining oldingi versiyalari bilan orqaga qarab muvofiqlikni saqlaydi - ilgari yozilgan Java loyihalarining aksariyati yangi versiyada ishga tushirilganda o'zgarishsiz ishlaydi. Java SE 22 (JDK, JRE va Server JRE) ning oʻrnatishga tayyor tuzilmalari Linux (x86_64, AArch64), Windows (x86_64) va macOS (x86_64, AArch64) uchun tayyorlangan. OpenJDK loyihasi tomonidan ishlab chiqilgan Java 23 ma'lumotnoma ilovasi GPLv2 litsenziyasi ostida to'liq ochiq manba bo'lib, GNU ClassPath istisnolari tijorat mahsulotlari bilan dinamik bog'lanish imkonini beradi.

Java SE 23 muntazam qoʻllab-quvvatlash versiyasi sifatida tasniflanadi va keyingi nashrga qadar yangilanishlarni olishda davom etadi. Uzoq muddatli qo'llab-quvvatlash (LTS) filiali Java SE 21 yoki Java SE 17 bo'lishi kerak, ular mos ravishda 2031 va 2029 yilgacha yangilanishlarni oladi (umuman 2028 va 2026 yilgacha mavjud). Java SE 8 ning LTS filiali uchun kengaytirilgan qo‘llab-quvvatlash 2030 yilgacha, Java SE 11 esa 2032 yilgacha davom etadi.

Java SE da taklif qilingan 23 ta innovatsiyalar orasida:

  • ZGC (Generation Z Garbage Collector) axlat yig'uvchisining generativ ish rejimi sukut bo'yicha "eski" va "yosh" ob'ektlarni alohida qayta ishlashdan foydalangan holda yoqilgan bo'lib, bu yaqinda yaratilgan ob'ektlarni qisqa muddatda tozalash samaradorligini oshiradi. Generational ZGC-dan foydalanish resurslarni taqsimlash paytida to'xtash xavfini kamaytiradi, axlat yig'ish paytida CPU yukini va xotira sarfini kamaytiradi. Generational ZGC-ni Apache Cassandra 4 bilan sinovdan o'tkazish, qattiq yig'ish o'lchami bilan o'tkazuvchanlikning 4 baravar oshishini va doimiy o'tkazuvchanlik bilan to'p hajmining chorak qisqarishini ko'rsatdi.
  • JavaDoc HTML va JavaDoc @ teglari aralashmasi o'rniga ishlatilishi mumkin bo'lgan izohlarda kodni hujjatlashtirish uchun Markdown-dan foydalanishni qo'shdi.
    Java SE 23 va OpenJDK 23 chiqarildi
  • Shablonlarning barcha turlarida, "instanceof" bayonotida va "switch" bloklarida ibtidoiy tiplardan (int, bayt, char va boshqa ob'ekt bo'lmagan asosiy turlar) foydalanishni dastlabki qo'llab-quvvatlash bilan naqshlarni moslashtirish mexanizmlari yaxshilandi. switch (x.getStatus()) { case 0 -> “yaxshi”; holat 1 -> "ogohlantirish"; 2-holat -> “xato”; case int i -> "noma'lum holat:" + i; } if (i instanceof byte b) { … b … }
  • Belgilangan modul tomonidan eksport qilingan barcha paketlarni bir vaqtning o'zida import qilish uchun yagona "import moduli M" bayonotidan foydalanish uchun dastlabki yordam qo'shildi. O'zgartirish modulli kutubxonalardan qayta foydalanishni sezilarli darajada soddalashtiradi, bu sizga kutubxonalar va sinflarni paketlar ierarxiyasidagi o'rnini aniqlamasdan kiritish imkonini beradi. Masalan, “import moduli java.base” belgilansa, java.base moduliga kiritilgan barcha 54 ta paketlar import qilinadi, ular avval alohida ko‘rsatilishi kerak edi (“import java.io.*”, “import java.util.* ” va boshqalar).

    Java sinf fayllarini tahlil qilish, yaratish va konvertatsiya qilish uchun Class-File API ning ikkinchi dastlabki tatbiq etilishi taklif etiladi. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bayt); bayt[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). startsWith("debug"))) { classBuilder.with(ce);

  • Vektor API-ning sakkizinchi ko'rinishi vektorli hisob-kitoblar uchun funktsiyalarni taqdim etadi, ular x86_64 va AArch64 protsessorlarida vektor ko'rsatmalari yordamida bajariladi va operatsiyalarni bir vaqtning o'zida bir nechta qiymatlarga (SIMD) qo'llash imkonini beradi. HotSpot JIT kompilyatorida skalar operatsiyalarni avtovektorlashtirish uchun taqdim etilgan imkoniyatlardan farqli o'laroq, yangi API parallel ravishda ma'lumotlarni qayta ishlash uchun vektorizatsiyani aniq nazorat qilish imkonini beradi.
  • Tanlangan til asosida matnni formatlash, ko‘rsatish va o‘qish uchun java.io.Console sinfiga format, printf, readPassword va readLine usullari qo‘shildi. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", yangi Sana()) 2024-yil-16-may
  • Kengaytirilgan Stream API ning ikkinchi oldindan ko'rish ilovasi qo'shildi, bu sizning oraliq operatsiyalaringizni aniqlashni qo'llab-quvvatlaydi, bu mavjud o'rnatilgan oraliq operatsiyalar kerakli ma'lumotlarni o'zgartirish uchun etarli bo'lmagan hollarda foydali bo'lishi mumkin. Mahalliy ishlov beruvchilar oqim elementlarini foydalanuvchi tomonidan belgilangan ishlov beruvchini qo‘llash orqali qayta ishlovchi yangi Stream::gather(Gatherer) oraliq operatsiyasi yordamida ulanadi. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(yangi WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • Ochiq/statik deklaratsiyalar, argumentlar massivi va sinf deklaratsiyasi bilan bog'liq boshqa ob'ektlardan voz kechishi mumkin bo'lgan "asosiy" usulning yashirin e'lon qilingan sinflar va nomsiz namunalarining uchinchi dastlabki amalga oshirilishi qo'shildi. // edi public class HelloWorld { public static void main(String[] args) { System.out.println("Salom dunyo!"); } } // endi siz main() ni bekor qilishingiz mumkin { System.out.println("Salom, Dunyo!"); }
  • Konstruktorlarga super(...) ga qoʻngʻiroq qilishdan oldin ifodalarni belgilash imkonini beruvchi funksiyaning ikkinchi koʻrinishi qoʻshildi, agar bu iboralar konstruktor tomonidan yaratilgan misolga tegishli boʻlmasa, meros qilib olingan sinf konstruktoridan ota-klass konstruktorini aniq chaqirish uchun foydalaniladi. class Outer { void salom() { System.out.println("Salom"); } class Inner { Inner() { salom(); super(); } } }
  • Oʻzgarmas maʼlumotlarni tarmoqlar boʻylab almashish va maʼlumotlarning asosiy mavzular (qiymatlar meros qilib olinadi) oʻrtasida samarali almashish imkonini beruvchi “Scoped Values”ning uchinchi oldindan koʻrish ilovasi qoʻshildi. Tarmoqli qiymatlar mahalliy o'zgaruvchilar mexanizmini almashtirish uchun ishlab chiqilmoqda va juda ko'p sonli virtual oqimlardan (minglab yoki millionlab iplar) foydalanganda samaraliroq bo'ladi. Scoped Values ​​va thread-local o'zgaruvchilar o'rtasidagi asosiy farq shundaki, birinchisi bir marta yoziladi, kelajakda o'zgartirilmaydi va faqat ipning bajarilishi davomida mavjud bo'lib qoladi.
  • Sinov uchun Structured Concurrency API ning uchinchi ko'rinishi taklif qilindi, bu turli xil oqimlarda ishlaydigan bir nechta vazifalarni bitta blok sifatida qayta ishlash orqali ko'p bosqichli ilovalarni ishlab chiqishni soddalashtiradi.
  • Sun.misc.Unsafe klassi tomonidan taqdim etilgan tashqi xotiraga kirish usullari (JVM tashqari) eskirgan va olib tashlash rejalashtirilgan. Uyumdan tashqari xotiraga kirish va tashqi kod bilan ishlash uchun VarHandle API va FFM (Foreign Function & Memory) API dan foydalanish tavsiya etiladi.

Bundan tashqari, JavaFX 23 grafik interfeysi bilan ilovalar yaratish platformasi yangilanishi va GraalVM JIT kompilyatorining asosiy Oracle JDK 23 tarkibiga kiritilganligini qayd etishimiz mumkin.

JavaScript (Node.js), Python, Ruby, R, JVM uchun har qanday tillar (Java, Scala, Clojure, Kotlin) va tillarda ishlaydigan ilovalarni qo'llab-quvvatlaydigan GraalVM universal virtual mashinasining yangi versiyasi ham taqdim etilgan. LLVM bitkodi yaratilishi mumkin (C, C++, Rust). JDK 23-ni qo'llab-quvvatlashdan tashqari, yangi versiya xotira sarfini va bajariladigan kod hajmini optimallashtiradi va JIT kompilyatsiyasidan foydalangan holda Python va WebAssembly-ni Java kodiga joylashtirish vositalarini to'liq qo'llab-quvvatlaydi.

Manba: opennet.ru

a Izoh qo'shish