Java SE 20 versiyasi

Olti oylik rivojlanishdan so'ng Oracle Java SE 20 (Java Platformasi, Standard Edition 20) ni chiqardi, u OpenJDK ochiq manba loyihasini mos yozuvlar dasturi sifatida ishlatadi. Ba'zi eskirgan xususiyatlarni olib tashlash bundan mustasno, Java SE 20 Java platformasining oldingi versiyalari bilan orqaga qarab muvofiqlikni saqlab qoladi - ilgari yozilgan Java loyihalarining ko'pchiligi yangi versiyada ishlayotganda o'zgartirishlarsiz ishlaydi. Java SE 20 (JDK, JRE va Server JRE) ning oʻrnatiladigan tuzilmalari Linux (x86_64, AArch64), Windows (x86_64) va macOS (x86_64, AArch64) uchun tayyorlangan. OpenJDK loyihasi tomonidan ishlab chiqilgan Java 20 mos yozuvlar ilovasi GPLv2 litsenziyasi ostida to'liq ochiq, GNU ClassPath istisnolari bilan tijorat mahsulotlariga dinamik ulanish imkonini beradi.

Java SE 20 muntazam qoʻllab-quvvatlash versiyasi sifatida tasniflanadi va keyingi nashrga qadar yangilanishlarni olishda davom etadi. Uzoq muddatli qo'llab-quvvatlash (LTS) filiali Java SE 17 bo'lishi kerak, u 2029 yilgacha yangilanishlarni olishda davom etadi. Eslatib o'tamiz, Java 10-ning chiqarilishidan boshlab, loyiha yangi ishlab chiqish jarayoniga o'tdi, bu yangi nashrlarni shakllantirish uchun qisqaroq tsiklni nazarda tutadi. Doimiy yangilanib turadigan bitta asosiy bo'limda yangi funksiyalar ishlab chiqilgan bo'lib, u tayyor o'zgarishlarni o'z ichiga oladi va yangi nashrlarni barqarorlashtirish uchun har olti oyda filiallar bo'linadi.

Java 20-dagi yangi xususiyatlar quyidagilarni o'z ichiga oladi:

  • Scoped Values ​​uchun dastlabki yordam mavjud bo'lib, u o'zgarmas ma'lumotni iplar bo'ylab almashishga va ma'lumotlarning asosiy oqimlari o'rtasida samarali almashishga imkon beradi (qiymatlar meros qilib olinadi). 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. class Server { yakuniy statik ScopedValue CURRENT_USER = new ScopedValue(); void service(So'rov so'rovi, Javobga javob) { var level = (so'rov. isAuthorized()? ADMIN : MEHMON); var user = new User(daraja); ScopedValue.where(CURRENT_USER, user).run(() -> Application.handle(so'rov, javob)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); agar (!user.canOpen()) yangi InvalidUserException(); yangi DBConnection-ni qaytaring(...); } }
  • Rekordlar sinflarining qiymatlarini tahlil qilish uchun Java 16 da joriy qilingan naqshlarni moslashtirish funksiyasini kengaytirib, yozuv naqshlarining ikkinchi koʻrinishi qoʻshildi. Masalan: rekord Point(int x, int y) {} statik void printSum(Object obj) { if (obj instanceof Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • "Switch" iboralarida naqshni moslashtirishning to'rtinchi dastlabki ilovasi qo'shildi, bu "xo'jalik" yorliqlari uchun aniq qiymatlarni emas, balki bir vaqtning o'zida bir qator qiymatlarni qamrab oladigan moslashuvchan naqshlarni ishlatishga imkon beradi, buning uchun ilgari mashaqqatli foydalanish kerak edi. “agar...else” iboralar zanjiri. statik String formatterPatternSwitch(Object obj) { qaytish switch (obj) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); }; }
  • FFM (Foreign Function & Memory) API ning ikkinchi dastlabki tatbiq etilishi qoʻshildi, bu sizga tashqi kutubxonalardan funksiyalarni chaqirish va JVM dan tashqari xotiraga kirish orqali Java dasturlarining tashqi kod va maʼlumotlar bilan oʻzaro taʼsirini tashkil qilish imkonini beradi.
  • Virtual iplarning ikkinchi ko'rinishi qo'shildi, ular engil iplar bo'lib, yozishni va yuqori samarali ko'p tarmoqli ilovalarni saqlashni sezilarli darajada soddalashtiradi.
  • Strukturaviy parallelizm uchun ikkinchi eksperimental API qoʻshildi, bu turli iplarda ishlaydigan bir nechta vazifalarni bitta blok sifatida koʻrib chiqish orqali koʻp tarmoqli ilovalarni ishlab chiqishni osonlashtiradi.
  • X86_64 va AArch64 protsessorlarida vektor ko'rsatmalari yordamida bajariladigan va operatsiyalarni bir vaqtning o'zida bir nechta qiymatlarga (SIMD) qo'llash imkonini beruvchi vektorli hisoblar uchun funktsiyalarni ta'minlovchi Vektor API-ning beshinchi ko'rinishi qo'shildi. 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.

Manba: opennet.ru

a Izoh qo'shish