JavaRush /Java blogi /Random-UZ /Java 12 bu yerda: nima yangilik?

Java 12 bu yerda: nima yangilik?

Guruhda nashr etilgan
Shunday qilib, Java 12-raqamda paydo bo'ldi. Garchi bu LTS versiyasi bo'lmasa ham (ya'ni, uzoq muddatli qo'llab-quvvatlanmasa ham, uzoq vaqt davomida qo'llab-quvvatlanadigan versiya ham emas. 11- versiya sakkiz-chi versiyaga ega birinchi LTS relizi hisoblanadi. yil qo'llab-quvvatlash davri ), unda qiziqarli narsalar yangilanishlarda paydo bo'ldi. Keling, ulardan eng muhimlarini ko'rib chiqaylik. Eslatib o'tamiz, Java-da o'zgartirish takliflari jeps sifatida qisqartiriladi (JDK Enhancement Proposal-dan). Java 12 bu yerda: nima yangilik?  - 1

Eng qiziqarli Jep JDK 12

189: Shenandoah: Kam toʻxtab turadigan axlat yigʻuvchi (eksperimental) Shenandoah axlat yigʻuvchisi Java ish zarralari bilan bir vaqtda tozalash orqali ish vaqtini qisqartiruvchi yangi algoritmdan foydalanadi. Bunday holda, Shenandoahdagi pauza vaqti uyumning kattaligidan qat'i nazar, bir xil bo'ladi. Ba'zi sabablarga ko'ra Oracle Sheandoah-ni o'zining "rasmiy" reliz tuzilmalariga kiritmadi, garchi ishlab chiquvchilar bu xususiyatni yangi versiyadagi eng muhimlaridan biri deb bilishlariga qaramay. Shunday qilib, agar siz ilg'or Garbage Collector-ni sinab ko'rishni rejalashtirmoqchi bo'lsangiz, Azul kabi uchinchi tomon tuzilmalaridan foydalanishingiz kerak . 230: Microbenchmark Suite Microbenchmark - bu qandaydir kichik elementning ishlashini o'lchaydigan mikrobenchmark. Java-da ular JMH ramkasi yordamida yoziladi va ishlaydi. 12-versiyadan boshlab JMH JDK-ga qo'shildi va unda allaqachon testlar yozilgan, bu esa ishlab chiquvchilarning hayotini osonlashtiradi. 325: Switch Expressions (oldindan ko‘rish) switch operatori yordamida ifoda yozishning yangi shakli. Xususiyatlar sahifasi an'anaviy kalit yordamida misol kodini taqdim etadi, bu erda uzilishdan doimiy foydalanish uni keraksiz ravishda batafsil qiladi va tez-tez tasodifiy xatolarga olib keladi.
switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        break;
}
Yangilanish mualliflari, agar ushbu yorliq mos bo'lsa, faqat yorliqning o'ng tomonidagi kod bajarilishini aniq ko'rsatish uchun "L case L ->" kommutator yorlig'ining yangi shaklini joriy qilishni taklif qilmoqdalar. Shunday qilib, yuqorida ko'rsatilgan kod yangi sintaksis yordamida sezilarli darajada qisqartirilishi mumkin:
switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY                -> System.out.println(7);
    case THURSDAY, SATURDAY     -> System.out.println(8);
    case WEDNESDAY              -> System.out.println(9);
}
334: JVM Constants API Doimiy pulda yuklanadigan konstantalar mavjud. Bular, masalan, String turi yoki har qanday ibtidoiy turdagi qiymatlar, shuningdek, sinflar va usullar kabi ish vaqti artefaktlari. Sinf fayllari bilan ishlashda dasturchilar yuklanadigan konstantalarni boshqarish uchun qulay vositalardan foydalanishadi. Ushbu jep mualliflari ushbu muammoni har biri o'ziga xos turdagi konstantalarni tavsiflaydigan yangi qiymatga asoslangan ramziy bog'lanish turlarini joriy etish orqali hal qila boshladilar. Innovatsion kod . 340: Bitta AArch64 port, ikkita emas Bu murakkab nom Java 9 da paydo bo'lgan muammoning yechimini yashiradi, o'shanda Oracle ning 64-bitli ARM portlari va Red Hat-dan aarch64 bir vaqtning o'zida to'plamda paydo bo'lgan. Bundan tashqari, JDK 11 chiqarilganda, hatto Oracle o'zi ham Oracle portlarining 64 bitli versiyasini qo'llab-quvvatlamagan. Shunday qilib, endi 64-bitli Oracle portlari olib tashlandi, 32-bitli ARM32 va 64-bitli, yanada samaraliroq, aarch64 qoldi. 341: Standart CDS arxivlari Juda yaxshi yangilanish, chunki u haqiqatan ham ilovalarni ishga tushirishni tezlashtiradi. Hech kimga sir emaski, Java ilovasi ishga tushganda juda ko'p sonli sinflar yuklana boshlaydi va bu juda uzoq jarayon. CDS sinf ma'lumotlarini almashish degan ma'noni anglatadi va bu funksiya ishga tushganda ishga tushirilgan barcha sinflarni bir xil sinflarning standart ro'yxatidan foydalangan holda maxsus sinf ma'lumotlar almashish arxiviga to'plash imkonini beradi. Natijada, dasturni ishga tushirish tezligi sezilarli darajada oshadi. 344: G1 G1 uchun toʻxtatilishi mumkin boʻlgan aralash toʻplamlar - bu Parallel GC oʻrniga JDK 9 da asosiy axlat yigʻuvchiga aylangan axlat yigʻuvchi. Java 10 da G1 bir nechta iplarda axlat yig'ishni o'rgandi. Biroq, hamma ham uning ishidan mamnun emas, asosiy muammolardan biri uzoq tanaffuslar edi. Endi ular bekor qilinishi mumkin. G1, dasturning xatti-harakatlarini tahlil qilish asosida ish hajmini aniqlaydi va keyin to'xtamasdan, hamma narsani to'plamaguncha "jonli" ob'ektlarni To'plam to'plamiga to'playdi. Ko'pincha G1 ish miqdorini hisoblashni o'tkazib yubordi va juda uzoq vaqt ishladi. Jep-344 amalga oshirilgandan so'ng, G1 qo'shimcha axlat yig'ishga o'tishi mumkin va agar keyingi bosqichni bajarish uchun maqbul bo'lganidan ko'proq vaqt kerak bo'lsa, bu qadam bekor qilinishi mumkin. 346: G1 dan foydalanilmagan xotirani zudlik bilan qaytaring Va yuqorida aytib o'tilgan G1 assembler lagerida yana bir nechta yangilanishlar. Ba'zan shunday bo'ldiki, Java yig'indisi xotirasi bo'lgan, lekin hech kim undan foydalanmagan, bu xotira. Java 12-da endi siz faol bo'lmagan xotirani operatsion tizimga "qaytishingiz" mumkin. Ilgari, G1 xotirasidan voz kechish juda kamdan-kam hollarda bo'lgan, ammo hozir hamma narsa soddalashtirilgan. Yangi xususiyat bilan, agar oxirgi tuzilishdan keyingi vaqt oralig'i tugagan bo'lsa va bir vaqtning o'zida hech qanday tsikl bo'lmasa, dastur faol emas deb aniqlanadi. Yana bir holat, bir muncha vaqt davomida kuzatilgan getloadavg() funktsiyasi belgilangan qabul qilinadigan chegaradan pastroq yukni ko'rsatsa yoki ko'rsatsa. Agar ikkita hodisadan biri sodir bo'lsa, axlatni qisman yig'ish boshlanadi. Java 12-da nima yo'q: Raw String Literals Ko'pgina ishlab chiquvchilar bu xususiyatga qiziqish bildirishgan, ammo u hech qachon ushbu nashrda paydo bo'lmagan. Uning mualliflari hali ham ish kerak, deb qaror qilishdi. Shunday qilib, biz Java-ning keyingi versiyalaridan birida string literallari bilan qulay ishlash funksiyasi paydo bo'lishiga umid qilishga jur'at etamiz. Raw string literallarini qo'llab-quvvatlash tildan qat'iy nazar string ma'lumotlari bilan ishlash imkonini beradi. Bu himoya qilish zaruratini yo'q qiladi. Ayniqsa, teskari qiyshiq chiziqlar keng qo'llaniladigan muntazam iboralarda va teskari qiyshiq chiziq chegaralovchi sifatida ishlatiladigan Windows-yo'lda foydalidir. Ya'ni, bunday konstruktsiyalardan qochish uchun: C:\\My\\Test\\Pack\\
Har bir dasturchi o'z ishida u yoki bu qiyinchiliklarga tez-tez duch keladi. Ba'zan ular ishlab chiquvchining tajribasizligi bilan bog'liq, lekin ba'zida vositaning o'zi nomukammalligi bilan bog'liq. Java ajoyib til, lekin mukammallikdan yiroq. Ehtimol, siz Java-da biror narsaga duch kelgan bo'lsangiz va "asbob" (til)ingizda nimani o'zgartirishni xohlayotganingizni bilasizmi? Izohlarda baham ko'ring!

xulosalar

Java 12 da hech qanday inqilob bo'lmagan. Biroq, hech kim buni rejalashtirmagan. Biroq, bir qator yangiliklar ilovalarning ishlashini optimallashtirish va ishni tezlashtirishga qaratilgan, bu yaxshi yangilik. Aytgancha, IDEA allaqachon JDK 12 ni qo'llab-quvvatlaydi, shuning uchun siz uning imkoniyatlarini sinab ko'rishingiz mumkin. Albatta, bir nechta yangilanishlar yangi boshlanuvchilarga to'g'ridan-to'g'ri ta'sir qiladi, garchi JavaRush-ni endigina o'rganishni boshlaganlar ham yangi kalit bilan o'ynashlari mumkin (--enable-preview bayrog'i o'rnatilgandan keyin).
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION