Java SE 14 versiyasi

Olti oylik rivojlanishdan so'ng, Oracle ozod etildi platforma JavaSE 14 (Java Platformasi, Standard Edition 14), ochiq manbali OpenJDK loyihasi mos yozuvlar dasturi sifatida ishlatiladi. Java SE 14 Java platformasining oldingi versiyalari bilan orqaga qarab muvofiqlikni saqlaydi; ilgari yozilgan barcha Java loyihalari yangi versiyada ishga tushirilganda oʻzgarishsiz ishlaydi. Oʻrnatishga tayyor Java SE 14 tuzilmalari (JDK, JRE va Server JRE) tayyorlangan Linux (x86_64), Windows va macOS uchun. OpenJDK loyihasi tomonidan ishlab chiqilgan ma'lumotnomani amalga oshirish Java 14 GPLv2 litsenziyasi ostida to'liq ochiq manba bo'lib, GNU ClassPath istisnolari bilan tijorat mahsulotlari bilan dinamik bog'lanish imkonini beradi.

Java SE 14 muntazam qo'llab-quvvatlash versiyasi sifatida tasniflanadi va keyingi nashrga qadar yangilanishlarni olishda davom etadi. Uzoq muddatli qo'llab-quvvatlash (LTS) filiali Java SE 11 bo'lishi kerak, u 2026 yilgacha yangilanishlarni olishda davom etadi. Java 8 ning oldingi LTS filiali 2020 yil dekabrigacha qo‘llab-quvvatlanadi. Keyingi LTS versiyasi 2021-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.

dan innovatsiyalar Java 14 mumkin belgi:

  • Eksperimental yordam qo'shildi naqsh mosligi "instanceof" operatorida, bu sizga tekshirilgan qiymatga kirish uchun mahalliy o'zgaruvchini darhol aniqlash imkonini beradi. Masalan, “String s = (String) obj” ni aniq belgilamasdan darhol “if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” deb yozishingiz mumkin.

    edi:

    if (obj instanceof Group) {
    Guruh guruhi = (Guruh) obj;
    var enries = group.getEntries();
    }

    Endi siz "Group group = (Group) obj" ta'rifisiz qilishingiz mumkin:

    agar (guruh guruhining obj namunasi) {
    var enries = group.getEntries();
    }

  • Yangi kalit so'z uchun tajribaviy yordam qo'shildi "rekord", bu sinflarni aniqlash uchun ixcham shaklni taqdim etadi, bu sizga ma'lumotlar faqat xatti-harakati o'zgarmaydigan maydonlarda saqlanadigan holatlarda equals(), hashCode() va toString() kabi turli xil past darajadagi usullarni aniq belgilashdan qochish imkonini beradi. Agar sinf equals(), hashCode() va toString() usullarining standart ilovalaridan foydalansa, u ularning aniq ta'rifisiz amalga oshirilishi mumkin:

    Bank tranzaktsiyasining ommaviy yozuvi (Mahalliy sana,
    ikki baravar miqdor
    String tavsifi) {}

    Ushbu deklaratsiya avtomatik ravishda konstruktor va qabul qiluvchi usullarga qo'shimcha ravishda equals(), hashCode() va toString() usullarini qo'shadi.

  • Standartlashtirilgan va "almashtirish" iboralarining yangi shaklini qo'llab-quvvatlash sukut bo'yicha yoqilgan bo'lib, u "tanaffus" operatorini ko'rsatishni talab qilmaydi, takroriy teglarni birlashtirishga imkon beradi va nafaqat operator shaklida, balki operator sifatida ham ishlatilishi mumkin. ifoda.

    var log = switch (voqea) {
    case PLAY -> "Foydalanuvchi ijro etish tugmachasini ishga tushirdi";
    case STOP, PAUSE -> "Foydalanuvchiga tanaffus kerak";
    standart -> {
    String xabar = event.toString();
    LocalDateTime now = LocalDateTime.now();
    "Noma'lum voqea" + xabar + hosil qiling
    » tizimga kirgan » + hozir;
    }
    };

  • Kengaytirilgan eksperimental yordam matn bloklari - blokdagi asl matn formatini saqlamasdan va belgilardan qochishdan foydalanmasdan, ko'p qatorli matn ma'lumotlarini manba kodiga kiritish imkonini beruvchi satr literallarining yangi shakli. Blok uchta qo'sh tirnoq bilan o'ralgan. Java 14 da matn bloklari endi bitta boʻshliqni belgilash uchun “\s” va keyingi satr bilan bogʻlash uchun “\” ketma-ketligini qoʻllab-quvvatlaydi (juda uzun qatorni chop etish kerak boʻlganda yangi qatorlarga eʼtibor bermaslik). Masalan, kod o'rniga

    String html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 shu yerda!\" » +
    "\n\t" + " » +
    "\n" + " ";

    belgilashingiz mumkin:

    html string = """


    »Java 1\
    shu yerda!

    """;

  • Istisno holatlar yuzaga kelganda diagnostikaning axborot mazmuni kengaytirildi NullPointerException. Ilgari xato xabari faqat satr raqamiga ishora qilgan bo'lsa, endi u istisnoga qaysi usul sabab bo'lganini batafsil bayon qiladi. Kengaytirilgan diagnostika hozirda faqat “-XX:+ShowCodeDetailsInExceptionMessages” bayrog‘i bilan ishga tushirilganda yoqiladi. Misol uchun, ushbu bayroqni ko'rsatishda, qatordagi istisno

    var name = user.getLocation().getCity().getName();

    xabarga olib keladi

    "Main" java.lang.NullPointerException mavzusidagi istisno: "Location.getCity()" ni chaqirib bo'lmaydi.
    chunki "User.getLocation()" ning qaytish qiymati null
    NullPointerExample.main da(NullPointerExample.java:5):5)

    Bu shuni ko'rsatadiki, Location.getCity() usuli chaqirilmagan va User.getLocation() null bo'lgan.

  • Amalga oshirildi O'z-o'zidan jamlangan Java ilovalari uchun paketlar yaratish imkonini beruvchi jpackage yordam dasturini oldindan ko'rish. Yordamchi dastur JavaFX-dan javapackager-ga asoslangan va turli platformalar uchun (Windows uchun msi va exe, macOS uchun pkg va dmg, Linux uchun deb va rpm) uchun xos formatlarda paketlar yaratish imkonini beradi. Paketlar barcha kerakli bog'liqliklarni o'z ichiga oladi.
  • G1 axlat yig'uvchisiga qo'shildi arxitekturadan foydalangan holda katta tizimlarda ishlashning o'ziga xos xususiyatlarini hisobga oladigan yangi xotira ajratish mexanizmi NUMA. Yangi xotira ajratgichi "+XX:+UseNUMA" bayrog'i yordamida yoqilgan va NUMA tizimlarida ish faoliyatini sezilarli darajada yaxshilashi mumkin.
  • Qo'shilgan JFR (JDK Flight Recorder) hodisalarini tezkor monitoring qilish uchun API, masalan, doimiy monitoringni tashkil qilish uchun.
  • Qo'shilgan jdk.nio.mapmode moduli, u yangi rejimlarni taklif qiladi (READ_ONLY_SYNC, WRITE_ONLY_SYNC) o'zgarmas xotiraga (NVM) havola qiluvchi xaritalangan bayt buferlarini (MappedByteBuffer) yaratish.
  • Amalga oshirildi Yangi MemorySegment, MemoryAddress va MemoryLayout abstraktsiyalarini boshqarish orqali Java ilovalariga Java to'plamidan tashqaridagi xotira hududlariga xavfsiz va samarali kirish imkonini beruvchi Tashqi xotiraga kirish API ni oldindan ko'rish.
  • E'lon qilingan Solaris OS va SPARC protsessorlari uchun eskirgan portlar (Solaris/SPARC, Solaris/x64 va Linux/SPARC) kelajakda ushbu portlarni olib tashlash niyatida. Ushbu portlarni bekor qilish hamjamiyatga Solaris va SPARC-ga xos xususiyatlarni saqlashga vaqt sarflamasdan yangi OpenJDK funksiyalarini ishlab chiqishni tezlashtirish imkonini beradi.
  • Oʻchirildi ikki yil oldin eskirgan deb belgilangan va texnik xizmat ko'rsatilmagan CMS (Concurrent Mark Sweep) axlat yig'uvchisi (CMS uzoq vaqt oldin G1 axlat yig'uvchisi bilan almashtirilgan). Bundan tashqari, e'lon qildi ParallelScavenge va SerialOld axlat yig'ish algoritmlari kombinatsiyasidan foydalanish eskirgan ("-XX:+UseParallelGC -XX:-UseParallelOldGC" variantlari bilan ishga tushirish).
  • ZGC (Z Garbage Collector) axlat yig'uvchisi uchun eksperimental yordam macOS va Windows platformalarida taqdim etilgan (ilgari faqat Linuxda qo'llab-quvvatlangan). ZGC passiv rejimda ishlaydi, axlat yig'ish bilan bog'liq kechikishni imkon qadar kamaytiradi (ZGC dan foydalanganda to'xtash vaqti 10 ms dan oshmaydi) va hajmi bir necha yuz megabaytdan ko'p terabaytgacha bo'lgan kichik va katta uyumlar bilan ishlay oladi.
  • Oʻchirildi Pack200 algoritmidan foydalangan holda JAR fayllarini siqish uchun asboblar to'plami va API.

Manba: opennet.ru

a Izoh qo'shish