Java SE 17 versiyasi

Olti oylik rivojlanishdan so'ng Oracle Java SE 17 (Java Platformasi, Standard Edition 17) ni chiqardi, u OpenJDK ochiq manba loyihasini mos yozuvlar dasturi sifatida ishlatadi. Ba'zi eskirgan xususiyatlarni olib tashlash bundan mustasno, Java SE 17 Java platformasining oldingi versiyalari bilan orqaga qarab muvofiqlikni saqlab qoladi - ilgari yozilgan Java loyihalarining ko'pchiligi yangi versiyada ishlayotganda o'zgartirishlarsiz ishlaydi. Java SE 17 (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 17 mos yozuvlar ilovasi GPLv2 litsenziyasi ostida to'liq ochiq, GNU ClassPath istisnolari bilan tijorat mahsulotlariga dinamik ulanish imkonini beradi.

Java SE 17 uzoq muddatli qo'llab-quvvatlash (LTS) versiyasi sifatida tasniflanadi, u 2029 yilgacha yangilanishlarni olishda davom etadi. Avvalgi Java 16 bosqichli versiyasi uchun yangilanishlar to'xtatildi. Java 11 ning oldingi LTS filiali 2026 yilgacha qo'llab-quvvatlanadi. Keyingi LTS versiyasi 2024-yil sentabriga rejalashtirilgan. 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 17-dagi yangi xususiyatlar quyidagilarni o'z ichiga oladi:

  • "O'tish" iboralarida naqshlarni moslashtirishning eksperimental tatbiq etilishi taklif qilinmoqda, bu "xo'jalik" yorliqlarida aniq qiymatlarni emas, balki bir vaqtning o'zida bir qator qiymatlarni qamrab oluvchi moslashuvchan shablonlardan foydalanishga imkon beradi, buning uchun avvallari mashaqqatli foydalanish kerak edi. “agar...else” iboralar zanjiri. Bundan tashqari, "switch" NULL qiymatlarini boshqarish qobiliyatiga ega. Obyekt o = 123L; String formatlangan = switch (o) { 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(); };
  • Amalga oshirishni meros qilib olish, kengaytirish yoki bekor qilish uchun boshqa sinflar va interfeyslar tomonidan foydalanilmaydigan muhrlangan sinflar va interfeyslar uchun barqarorlashtirilgan yordam. Muhrlangan sinflar, shuningdek, kengaytirishga ruxsat berilgan kichik sinflarni aniq ro'yxatga olish asosida, kirish modifikatorlariga qaraganda, superklassdan foydalanishni cheklashning ko'proq deklarativ usulini taqdim etadi. com.example.geometry paketi; umumiy muhrlangan sinf Shakl ruxsat beradi com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Kvadrat {…}
  • 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 ikkinchi ko'rinishi taklif etiladi. 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.
  • Ilovalarga Java ish vaqtidan tashqarida kod va maʼlumotlar bilan oʻzaro taʼsir oʻtkazish imkonini beruvchi xorijiy funksiya va xotira API-ning oldindan koʻrishi qoʻshildi. Yangi API sizga JVM bo'lmagan funksiyalarga samarali qo'ng'iroq qilish va JVM tomonidan boshqarilmaydigan xotiraga kirish imkonini beradi. Masalan, JNI dan foydalanmasdan tashqi umumiy kutubxonalardan funksiyalarga qo'ng'iroq qilishingiz va jarayon ma'lumotlariga kirishingiz mumkin.
  • Java 2D API-ni quvvatlaydigan, o'z navbatida Swing API-ni quvvatlaydigan macOS renderlash mexanizmi Metal grafik API-dan foydalanishga moslashtirilgan. MacOS platformasi sukut boʻyicha OpenGL-dan foydalanishda davom etadi va Metall qoʻllab-quvvatlashni yoqish uchun “-Dsun.java2d.metal=true” oʻrnatish va kamida macOS 10.14.x bilan ishlash talab etiladi.
  • MacOS/AArch64 platformasi uchun port qo‘shildi (yangi Apple M1 chiplari asosidagi Apple kompyuterlari). Portning o'ziga xos xususiyati W ^ X (Write XOR Execute) xotirani himoya qilish mexanizmini qo'llab-quvvatlash bo'lib, unda yozish va bajarish uchun xotira sahifalariga bir vaqtning o'zida kirish mumkin emas. (kod faqat yozish o'chirilganidan keyin bajarilishi mumkin va xotira sahifasiga yozish faqat bajarish o'chirilganidan keyin mumkin).
  • Oʻzgaruvchan nuqtali ifodalar uchun faqat qatʼiy fp semantikasidan foydalanishga qaytarildi. Java 1.2 versiyasi chiqqandan beri mavjud bo'lgan "standart" semantikani qo'llab-quvvatlash to'xtatildi, jumladan, juda eski x87 matematik protsessorlari bo'lgan tizimlarda ishlashni soddalashtirish (SSE2 ko'rsatmalari paydo bo'lganidan keyin qo'shimcha semantikaga ehtiyoj yo'qoldi).
  • Soxta tasodifiy sonlar generatorlari uchun interfeyslarning yangi turlari joriy etildi va tasodifiy sonlarni yaxshiroq yaratish uchun qo'shimcha algoritmlar amalga oshirildi. Ilovalarga psevdor tasodifiy raqamlarni yaratish algoritmini tanlash imkoniyati beriladi. Tasodifiy ob'ekt oqimlarini yaratish uchun yaxshilangan yordam.
  • Sun.misc.Unsafe kabi muhim API-lar bundan mustasno, barcha JDK ichki qurilmalarining qattiq inkapsulyatsiyasi amalga oshirildi. Qattiq inkapsulyatsiya koddan ichki sinflarga, usullarga va maydonlarga kirishga urinishlarni bloklaydi. Ilgari qattiq inkapsulyatsiya rejimini "--illegal-access=permit" opsiyasi yordamida o'chirib qo'yish mumkin edi, ammo bu endi eskirgan. Ichki sinflar, usullar va maydonlarga kirishni talab qiladigan ilovalar ularni manifest faylidagi --add-opens opsiyasi yoki Add-Opens atributi yordamida aniq belgilashi kerak.
  • Ilovalarga ma'lumotlarni seriyadan chiqarish filtrlarini aniqlash imkoniyati beriladi, ular kontekstga sezgir bo'lishi mumkin va maxsus ketma-ketlik operatsiyalari asosida dinamik ravishda tanlanishi mumkin. Belgilangan filtrlar butun virtual mashinaga (JVM-keng), ya'ni. nafaqat dasturning o'zini, balki ilovada foydalaniladigan uchinchi tomon kutubxonalarini ham qamrab oladi.
  • Swing yuqori DPI ekranlarida foydalanuvchi interfeysini yaxshilash uchun katta piktogrammalarni yuklash uchun javax.swing.filechooser.FileSystemView.getSystemIcon usulini qo'shdi.
  • Java.net.DatagramSocket API alohida java.net.MulticastSocket API-ga ehtiyoj sezmasdan Multicast guruhlariga ulanishni qo'llab-quvvatlaydi.
  • HotSpot VM C2 JIT kompilyatorida oraliq kod ko'rinishini interaktiv vizualizatsiya qilishni ta'minlovchi IGV (Ideal Graph Visualizer) yordam dasturi takomillashtirildi.
  • JavaDoc-da, javac kompilyatoriga o'xshab, xato chiqqanda, endi manba fayldagi muammoli qatorning raqami va xatoning joylashuvi ko'rsatiladi.
  • Tizim belgilarini kodlash nomini aks ettiruvchi native.encoding xususiyati qo‘shildi (UTF-8, koi8-r, cp1251 va boshqalar).
  • Java.time.InstantSource interfeysi qo'shildi, bu vaqt mintaqasiga murojaat qilmasdan vaqtni boshqarish imkonini beradi.
  • O'n oltilik va aksincha o'zgartirish uchun java.util.HexFormat API qo'shildi.
  • Kompilyatorga o'lik kodni yo'q qilish operatsiyalarini o'chirib qo'yuvchi qora tuynuk rejimi qo'shildi, bu esa unumdorlik testlarini o'tkazishda ishlatilishi mumkin.
  • Asinxron rejimda jurnallarni yozib olish uchun Runtime dasturiga “-Xlog: async” opsiyasi qo‘shildi.
  • Xavfsiz ulanishlarni o'rnatishda TLS 1.3 sukut bo'yicha yoqilgan (ilgari TLS 1.2 ishlatilgan).
  • Brauzerda Java ilovalarini ishga tushirish uchun foydalanilgan ilgari e'lon qilingan eskirgan Applet API (java.applet.Applet*, javax.swing.JApplet) o'chirish uchun mo'ljallangan toifaga ko'chirildi (qo'llab-quvvatlash tugagandan so'ng o'z ahamiyatini yo'qotdi). brauzerlar uchun Java plaginlari uchun).
  • Uzoq vaqtdan beri o'z ahamiyatini yo'qotgan va brauzer plaginini qo'llab-quvvatlash tugagandan so'ng talab qilinmagan xavfsizlik menejeri o'chirilishi rejalashtirilganlar toifasiga o'tkazildi.
  • RMI faollashtirish mexanizmi olib tashlandi, u eskirgan, Java 8-da variant toifasiga kiritilgan va zamonaviy amaliyotda deyarli ishlatilmaydi.
  • HotSpot JVM uchun Java kodini dinamik kompilyatsiya qilish uchun JIT (faqat o'z vaqtida), shuningdek, virtual mashinani ishga tushirishdan oldin sinflarni mashina kodiga oldindan ko'rish (AOT, muddatidan oldin) rejimini qo'llab-quvvatlaydigan eksperimental kompilyator. , SDK dan olib tashlandi. Kompilyator Java-da yozilgan va Graal loyihasi ishiga asoslangan. Ta'kidlanishicha, kompilyatorga texnik xizmat ko'rsatish ko'p mehnat talab qiladi, bu esa ishlab chiquvchilar tomonidan talab bo'lmaganda oqlanmaydi.

Manba: opennet.ru

a Izoh qo'shish