JavaRush /Java blogi /Random-UZ /Java 11 chiqarildi: yangi xususiyatlar va imkoniyatlar

Java 11 chiqarildi: yangi xususiyatlar va imkoniyatlar

Guruhda nashr etilgan
Ilgari Java-ning yangi versiyalari kamdan-kam va kechikishlar bilan paydo bo'lgan. Endi Oracle o'zi uchun o'rnatgan ritmni muvaffaqiyatli saqlab kelmoqda: "har olti oyda yangi Java". Shunday qilib, bir necha kun oldin, qat'iy jadvalga muvofiq, biz nihoyat Java SE 11 va JDK (Java Development Kit) dasturini oldik. Java 11 chiqarildi: yangi xususiyatlar va imkoniyatlar - 1Har doimgidek, yangi versiya eski versiyalar bilan mos keladi va Java 11-ni qo'llab-quvvatlash 2026 yil dekabridan oldin tugaydi.

Java SE 11-dagi yangi xususiyatlar (ishlab chiquvchilarga ko'rinadi)

Eslatib o'tamiz, Java-da o'zgarishlar JEP "JDK Enhancement Proposal" ni amalga oshirish orqali amalga oshiriladi. JEP OpenJDKni takomillashtirish taklifi boʻlib, maʼqullanishi, kechiktirilishi yoki rad etilishi mumkin. Ya'ni, mohiyatan JEPlar to'plami OpenJDK uchun rivojlanish strategiyasidir. Yangi "xususiyat" oldidan kvadrat qavs ichida biz tegishli JEP raqamini ko'rsatamiz. [323] Lambda parametrlari uchun mahalliy oʻzgaruvchi sintaksisi - lambda parametrlari uchun var sintaksisi Java 10 var kalit soʻzini taqdim etdi, bu esa mahalliy oʻzgaruvchining turini aniq koʻrsatmaslik imkonini berdi. Bu kodni soddalashtirdi. JEP 323 lambda ifodalari bilan ushbu sintaksisdan foydalanishni kengaytiradi. Oddiy misol:
list.stream ()
                 .map ((var s) -> s.toLowerCase ())
                 .collect (Collectors.toList ());
Taniqli Java Evangelisti Saymon Ritter yozganidek , tajribali Java dasturchisi bu holatda var dan foydalanish keraksiz bo'lishi mumkinligini ta'kidlaydi, chunki yuqoridagi kodni quyidagilar bilan almashtirish mumkin:
list.stream ()
                  .map (s -> s.toLowerCase ())
                  .collect (Collectors.toList ());
Xo'sh, nega qo'llab-quvvatlash var? Faqat bitta alohida holat bor - siz lambda parametriga izoh qo'shmoqchi bo'lsangiz. Buni ba'zi turlarsiz amalga oshirib bo'lmaydi va aniq turdan foydalanmaslik uchun biz var yordamida hamma narsani soddalashtirishimiz mumkin:
list.stream ()
                 .map ((@ Notnull var s) -> s.toLowerCase ())
                 .collect (Collectors.toList ());
[330] Yagona faylli manba kodli dasturlarni ishga tushirish Java ishga tushirgichni Java manba kodi bilan bitta fayl sifatida dasturni ishga tushirish uchun yaxshilash Java koʻpincha oʻzining batafsil sintaksisi va hatto ahamiyatsiz dasturni ishga tushirishning koʻp bosqichli “marosimi” uchun tanqid qilinadi. Ba'zida bu yangi boshlanuvchilarni qo'rqitadi. “ Salom dunyo! ” deb chop etadigan dastur yozish uchun. ", siz umumiy statik asosiy usul bilan sinf yozishingiz voidva System.out.println. Buni amalga oshirgandan so'ng, kodni javac yordamida kompilyatsiya qilishingiz kerak . Nihoyat, shundan so'ng, siz baxtsiz tabrikni ko'rsatadigan dasturni ishga tushirishingiz mumkin (albatta, IDEA va JavaRush -ga o'rnatilgan integratsiyalashgan ishlab chiqish muhiti ushbu "ilovani ishga tushirish sehrini" o'z-o'zidan amalga oshiradi - muharrir eslatmasi ). Rostini aytaylik: ko'pgina dasturlash tillarida dasturlarni ishga tushirish uchun haqiqiy skript ancha sodda ko'rinadi. JEP 330 bitta faylli dasturni kompilyatsiya qilish zaruratini yo'q qiladi, shuning uchun agar siz buyruq qatoridan foydalansangiz, shunchaki yozing.
java HelloWorld.java
Java ishga tushirgichi faylda Java manba kodi mavjudligini aniqlaydi va uni bajarishdan oldin kodni sinf fayliga kompilyatsiya qiladi. Siz parametrlarni manba kodi fayl nomidan keyin yoki oldin joylashtirishingiz mumkin. Nomdan keyin qo'yilganlar dastur bajarilganda parametr sifatida o'tkaziladi. Nom oldiga qo'yilganlar kod tuzilgandan so'ng Java ishga tushirgichiga parametr sifatida uzatiladi. Kompilyatorga xos variantlar (masalan, sinf yo'li) kompilyatsiya qilish uchun javac -ga o'tkaziladi . Misol. Qator:
java -classpath / home / foo / java Hello.java Bonjour
bu qatorlarga teng bo'ladi:
javac -classpath / home / foo / java Hello.java
java -classpath / home / foo / java Hello Bonjour
[321] HTTP Client (Standart) - HTTP Client API qo'llab-quvvatlashi standartlashtirildi JDK 9 HTTP Client protokolini (JEP 110) qo'llab-quvvatlash uchun yangi APIni taqdim etdi . JDK 9 Java platformasi modul tizimini (JPMS) ham taqdim etganligi sababli, ushbu API inkubator moduli sifatida kiritilgan (bu modullar ishlab chiquvchilarga Java SEda hali standart boʻlmagan yangi API bilan taʼminlash uchun moʻljallangan, shu bilan birga “jonli” APIlar yaratilmoqda. olib tashlash uchun tayyorlangan - ishlab chiquvchilar yangi API-larni sinab ko'rishlari va fikr bildirishga harakat qilishlari mumkin). Kerakli o'zgartirishlar kiritilgandan so'ng (bu API JDK 10 da yangilangan), API standartning bir qismiga aylanishi mumkin. Shunday qilib, HTTP Client API endi rasmiy ravishda Java SE 11 ga kiritilgan . Bu JDK uchun java.net.http uchun yangi modul va paketni taqdim etadi . Asosiy yangi turlar: HttpClient HttpRequest HttpResponse WebSocket Ushbu API sinxron yoki asinxron tarzda ishlatilishi mumkin. Asinxron rejimda va ishlatiladi . [320] Java EE va CORBA modullarini olib tashlash Java ning toʻqqizinchi versiyasida Java platforma moduli tizimining (JPMS) joriy etilishi bilan monolit rt.jar faylini bir nechta modullarga boʻlish mumkin boʻldi . Bundan tashqari, JPMS sizga faqat ilovangiz uchun zarur bo'lgan modullarni o'z ichiga olgan Java ish vaqti muhitini yaratishga imkon beradi va bu uning hajmini sezilarli darajada kamaytiradi. Shaffof tarzda belgilangan modul chegaralari bilan Java API ning eskirgan qismlarini olib tashlash ancha oson – JEP 320 shunday qiladi.Java.se.ee metamodulu oltita modulni o‘z ichiga oladi, ular Java SE 11 standartining bir qismi bo‘lmaydi va kiritilmaydi. JDK da: CompletionFuturesCompletionStages
  • korba
  • tranzaksiya
  • faollashtirish
  • xml.bind
  • xml.ws
  • xml.ws.annotatsiya
Ushbu modullar JDK 9 da eskirgan va kompilyatsiya yoki bajarishda sukut bo'yicha kiritilmagan. Bu shuni anglatadiki, agar siz ushbu modullarning API-larini JDK 9 yoki JDK 10 da ishlatadigan dasturni kompilyatsiya qilishga yoki ishga tushirishga harakat qilsangiz, u muvaffaqiyatsiz tugadi. Agar siz ushbu modullarning API-larini kodingizda ishlatsangiz, ularni alohida modul yoki kutubxona sifatida taqdim etishingiz kerak bo'ladi.

Yangi API'lar

HTTP Client va Flight Recorder modullarini til standartiga kiritish tufayli JDK 11 da ko'plab yangi APIlar paydo bo'ldi . APIlarning toʻliq roʻyxati uchun Gunnar Morling tomonidan tuzilgan JDK ning turli versiyalarining quyidagi keng qamrovli taqqoslashiga qarang . Va bu eslatmada java.net.http , jdk.jfr va java.security modullariga kiritilmagan ba'zi yangi usullarni sanab o'tamiz . java.lang.String JDK 11 API-dagi Stringga kiritilgan eng muhim o'zgarishlardan biri bo'lib , bir nechta foydali yangi usullar mavjud.
  • boolean isBlank (): agar satr bo'sh bo'lsa yoki faqat bo'sh joy bo'lsa, true qiymatini qaytaradi, aks holda noto'g'ri.

  • Stream lines(): Ushbu satrdan ajratilgan, qator terminatorlari bilan ajratilgan chiziqlar oqimini qaytaradi.

  • String repeat (int): Qiymati int marta takrorlangan satrning birlashmasi bo'lgan satrni qaytaradi .

  • String strip (): Birinchi bo'sh joy bo'lmagan belgidan oldin yoki keyin olib tashlangan barcha bo'shliqlar bilan qatorni qaytaradi.

  • String stripLeading (): birinchi boʻsh joy boʻlmagan belgigacha olib tashlangan barcha boʻshliqlar bilan qatorni qaytaradi.

  • String stripTrainling (): Oxirgi bo'sh joy bo'lmagan belgi olib tashlanganidan keyin yuzaga keladigan barcha bo'shliqlar bilan qatorni qaytaradi.
strip()Usul allaqachon shunga o'xshash narsani qildi trim (), lekin bo'shliqlar bilan bu usullar turli narsalarni anglatadi. Bunday holda, trim()faqat bo'shliqlar kesiladi va ichida strip()- shuningdek, yorliqlar kabi maxsus belgilar. java.lang.StringBuffer java.lang.StringBuildercompareTo () Ushbu sinflarning ikkalasi ham qabul qiluvchi yangi usulni o'z ichiga oladi StringBuffer/ StringBuilderva qaytaradi int. Leksik taqqoslash usuli yangi usulga o'xshaydi compareTo() CharSequence. java.io.ByteArrayOutputStream
  • void writeBytes (byte []): parametrning barcha baytlarini java.io.FileReader chiqish oqimiga yozadi
Bu yerda belgilash imkonini beruvchi ikkita yangi konstruktor mavjud Charset. java.io.FileWriter t ni belgilash imkonini beruvchi to'rtta yangi konstruktor Charse. java.io.InputStream
  • io.InputStream nullInputStream (): InputStreamhech qanday baytni o'qimaydigan ni qaytaradi. Ushbu usuldan qanday foydalanish kerak? Siz buni sizga kerak bo'lmagan chiqishni tashlab yuborish yoki har doim nol baytni qaytaradigan kiritishni kiritish uchun /dev/null kabi narsa deb o'ylashingiz mumkin.
java.io.OutputStream
  • io.OutputStream nullOutputStream ()
java.io.Reader
  • io.Reader nullReader ()
java.io.Writer
  • io.Writer nullWriter ()
java.lang.Character
  • String toString (int): Bu mavjud usulning ortiqcha yuki, lekin char o'rniga int dan foydalanadi.
java.lang.CharSequence
  • int compare (CharSequence, CharSequence): leksikografik jihatdan ikki misolni solishtiradi CharSequence. Agar birinchi ketma-ketlik leksikografik jihatdan mos ravishda ikkinchisidan kichik, teng yoki undan katta bo'lsa, salbiy qiymatni, nolni yoki ijobiy qiymatni qaytaradi.
java.lang.ref.Reference
    lang.Object clone (): Java xushxabarchisi Saymon Ritter bu usul uni chalkashtirib yuborishini tan oladi. Sinf Referenceinterfeysni amalga oshirmaydi Cloneableva bu usul har doim istisno qiladi CloneNotSupportedException. Biroq, ekspert bu usul kelajakda biror narsa uchun foydali bo'lishini taklif qiladi.
java.lang.Runtime java.lang.System Bu yerda yangi usullar yo'q. Aytib o'tamizki, usul runFinalizersOnExit ()ushbu ikkala sinfdan ham olib tashlandi, bu esa moslik bilan bog'liq muammolarni keltirib chiqarishi mumkin. java.lang.Threaddestroy () Qo'shimcha usullar yo'q, biz faqat ular stop (Throwable)o'chirilganligini eslatib o'tamiz . Biroq stop (), hech qanday dalil talab qilmaydigan, hali ham mavjud. Iltimos, buni yodda tuting, chunki moslik bilan bog'liq muammolar bo'lishi mumkin. java.nio.ByteBuffer java.nio.CharBuffer java.nio.DoubleBuffer java.nio.FloatBuffer java.nio.LongBuffer java.nio.ShortBuffer Ushbu sinflarning barchasida til ishlab chiquvchilari mismatch ()tilning nisbiy indeksini topadigan va qaytaradigan usulni qo'shgan. bu bufer va berilgan bufer o'rtasidagi birinchi nomuvofiqlik. java.nio.channels.SelectionKey
  • int interestOpsAnd (int)

  • int interestOpsOr (int)
java.nio.channels.Selector
  • int select (java.util.function.Consumer, long): Tegishli kanallari kiritish/chiqarish operatsiyalari uchun tayyor bo'lgan tugmalar ustida amalni tanlaydi va bajaradi. Uzoq parametr - bu vaqt tugashi.

  • int select (java.util.function.Consumer): yuqoridagi usul kabi ishlaydi, lekin vaqt tugashisiz.

  • int selectNow (java.util.function.Consumer): yuqoridagi usul kabi ishlaydi, faqat u bloklanmaydi.

java.nio.file.Files
  • String readString (Path): UTF-8 kodlash yordamida baytlarni belgilarga dekodlash, fayldan barcha tarkibni satrga o'qiydi .

  • String readString (Path, Charset): Yuqoridagi usul kabi ishlaydi, lekin yordamida baytlarni belgilarga dekodlaydi Charset.

  • Path writeString (Path, CharSequence, java.nio.file. OpenOption []): Agar faylga belgilar ketma-ketligini yozsangiz CharSequence, bu belgilar baytlarga kodlanadi ( UTF-8 yordamida ).

  • Path writeString (Path, CharSequence, java.nio.file. Charset, OpenOption []): yuqoridagi usul kabi ishlaydi, faqat belgilar yordamida baytlarga kodlangan Charset.
java.nio.file.Path
  • Path(String, String[]): Yoʻlni qaytaradi, birlashganda yoʻl satrini tashkil etuvchi yoʻl yoki satrlar ketma-ketligini oʻzgartiradi.

  • Path (net.URI): URI ni o'zgartirish orqali yo'lni qaytaradi.
java.util. Collection
  • Object [] toArray (java.util.function.IntFunction): Qaytarilgan massivni tarqatish uchun taqdim etilgan generator funktsiyasidan foydalanib, ushbu to'plamdagi barcha elementlarni o'z ichiga olgan massivni qaytaradi.
java.util.concurrent.PriorityBlockingQueue java.util.PriorityQueue
  • void forEach (java.util.function.Consumer): Barcha elementlar qayta ishlanmaguncha yoki harakat istisno qilmaguncha har bir Iterable elementida belgilangan amalni bajaradi .

  • boolean removeAll (java.util.Collection): Belgilangan to'plamda mavjud bo'lgan ushbu to'plamning barcha elementlarini olib tashlaydi (ixtiyoriy operatsiya).

  • boolean removeIf (java.util.function.Predicate): Ushbu to'plamning berilgan predikatga mos keladigan barcha elementlarini olib tashlaydi.

  • boolean retainAll (java.util.Collection): Ushbu to'plamdagi faqat belgilangan to'plamdagi elementlarni saqlaydi (ixtiyoriy operatsiya).
java.util.concurrent.TimeUnit
  • long convert (java.time.Duration): Berilgan vaqt davomiyligini ushbu birlikka aylantiradi.
java.util.function.Predicate
  • Predicate not(Predicate): berilgan predikatning inkori bo'lgan predikatni qaytaradi.
Masalan, quyidagi kod:
lines.stream ()

.filter (s ->! s.isBlank ())
Bunga aylantirilishi mumkin:
lines.stream ()

.filter (Predicate.not (String :: ISBLANK))
va agar biz statik importdan foydalansak, biz quyidagilarni olamiz:
lines.stream ()
.filter (not(String :: ISBLANK))
java.util.Ixtiyoriy java.util.OptionalInt java.util.OptionalDouble java.util.OptionalLong
  • boolean isEmpty (): Qiymat bo'lmasa rost , aks holda noto'g'ri qaytaradi .
java.util.regex.Pattern
  • Predicate asMatchPredicate (): Java mutaxassisi Saymon Ritterning fikricha, bu yerda haqiqiy JDK 11 API marvarid yashiringan bo‘lishi mumkin.Ushbu usul ushbu naqsh berilgan kirish qatoriga mos kelishini tekshiradigan predikat yaratadi.
java.util.zip.Deflater
  • int deflate (ByteBuffer): Kirish ma'lumotlarini siqib chiqaradi va belgilangan buferni siqilgan ma'lumotlar bilan to'ldiradi.

  • int deflate (ByteBuffer, int): Kirish ma'lumotlarini siqib chiqaradi va belgilangan buferni siqilgan ma'lumotlar bilan to'ldiradi. Siqilgan ma'lumotlarning haqiqiy miqdorini qaytaradi.

  • void setDictionary (ByteBuffer): Berilgan lug'atni berilgan buferda baytlarga siqishni o'rnatadi. ByteBufferBu endi bayt massivini emas, balki ni qabul qila oladigan mavjud usulning ortiqcha yukidir .

  • void setInput (ByteBuffer): Kirish ma'lumotlarini siqishni o'rnatadi. Bu, shuningdek, mavjud usulning ortiqcha yukidir.
java.util.zip.Inflater
  • int inflate (ByteBuffer): Belgilangan buferga baytlarni ochadi. Siqilmagan baytlarning haqiqiy sonini qaytaradi.

  • void setDictionary (ByteBuffer): Berilgan lug'atni berilgan buferdagi baytlarga o'rnatadi. Mavjud usulning haddan tashqari yuklangan shakli.

  • void setInput (ByteBuffer): Dekompressiya uchun kirish ma'lumotlarini o'rnatadi. Mavjud usulning haddan tashqari yuklangan shakli.
javax.print.attribute.standard.DialogOwner Bu JDK 11 da yangi sinf boʻlib, barcha oynalar yoki maʼlum bir oyna ustida koʻrsatiladigan chop etish yoki sozlash sahifasi soʻrovlarini qoʻllab-quvvatlash uchun ishlatiladigan atribut sinfidir. javax.swing.DefaultComboBoxModel javax.swing.DefaultListModel
  • void addAll (Collection): To'plamdagi barcha elementlarni qo'shadi.

  • void addAll (int, Collection): Belgilangan indeksdan boshlab to'plamda mavjud bo'lgan barcha elementlarni qo'shadi.
javax.swing.ListSelectionModel
  • int [] getSelectedIndices (): Tanlangan modeldagi barcha tanlangan indekslar massivini ortib borish tartibida qaytaradi.

  • int getSelectedItemsCount (): Tanlangan elementlar sonini qaytaradi.
jdk.jshell.EvalException
  • shell.JShellException getCause (): Ushbu EvalException tomonidan taqdim etilgan ijro mijozidagi o'chirilishi mumkin bo'lgan sababni qaytaradi yoki sabab mavjud bo'lmasa yoki noma'lum bo'lsa null.

Java 11 ning dasturchi bo'lmagan xususiyatlari

[181] Nest-Based Access Control Java va boshqa tillar ichki sinflar orqali ichki oʻrnatilgan sinflarni qoʻllab-quvvatlaydi. Buning ishlashi uchun kompilyator muayyan fokuslarni bajarishi kerak. Masalan:
public class Outer {
    private int outerInt;

     class Inner {
       public void printOuterInt() {
         System.out.println("Outer int = " + outerInt);
       }
     }
   }
Kompilyator uni kompilyatsiya qilishdan oldin quyidagi kabi narsalarni ishlab chiqarish uchun o'zgartiradi:
public class Outer {
      private int outerInt;

      public int access$000() {
        return outerInt;
      }

    }


    class Inner$Outer {

      Outer outer;

      public void printOuterInt() {
        System.out.println("Outer int = " + outer.access$000());
      }
    }
Garchi mantiqan ichki sinf tashqi sinf bilan bir xil kodning bir qismi bo'lsa-da, u alohida sinf sifatida tuzilgan. Shuning uchun, bu operatsiya tashqi sinfning shaxsiy maydoniga kirishni ta'minlash uchun kompilyator tomonidan yaratilishi kerak bo'lgan sintetik birlashma usulini talab qiladi . Ushbu JEP uyalar tushunchasini taqdim etadi, bu erda bir uyaning ikkita a'zosi (bizning misolimizda tashqi va ichki) uyalar do'stlaridir. Sinf fayl formati uchun ikkita yangi atribut belgilangan: NestHost va NestMembers . Ushbu o'zgarishlar ichki sinflar va bayt kodini qo'llab-quvvatlaydigan boshqa tillar uchun foydalidir. Bu funksiya java.lang.Class uchun uchta yangi usulni taqdim etadi : Class getNestHost () Class [] getNestMembers () boolean isNestmateOf (Class) [309] Dinamik sinf-fayl konstantalari Bu JEP yangisini qoʻllab-quvvatlash uchun sinf fayl formatining kengaytmasini tavsiflaydi. doimiy hovuz shakli CONSTANT_Dynamic. Dinamik konstanta g'oyasi oksimoronga o'xshaydi, lekin aslida siz uni Java 11 da yakuniy qiymat sifatida ko'rishingiz mumkin. Birlashtiruvchi konstantaning qiymati kompilyatsiya vaqtida o'rnatilmaydi (boshqa konstantalardan farqli o'laroq), lekin yuklash chizig'idan foydalanadi yetkazib berish vaqtidagi qiymatni aniqlash usuli. Shuning uchun qiymat dinamik, lekin uning qiymati faqat bir marta o'rnatilganligi sababli u ham doimiydir. Bu xususiyat, birinchi navbatda, JVM-da ishlash uchun bayt-kodlar va sinf fayllarini ishlab chiqaradigan yangi tillarni va kompilyatorlarni ishlab chiquvchi odamlarga qaratilgan. [315] Aarch64 Intrinsics-ni yaxshilash Ushbu JEP Red Hat jamoasi tomonidan taklif qilingan. JVM endi Arm 64 ko'rsatmalar to'plamida mavjud bo'lgan ko'proq maxsus ko'rsatmalardan foydalanishi mumkin.Xususan ,sin () bu , usullari va cos ()java.lang.Math log ()sinfining ishlashini yaxshilaydi . [318] Epsilon: Ishlamaydigan axlat yigʻuvchi JEP 315 da boʻlgani kabi , Red Hat kompaniyasiga Epsilon axlat yigʻuvchisini taqdim etgani uchun minnatdorchilik bildirishingiz mumkin. Epsilon g'ayrioddiy, chunki u aslida axlat yig'maydi! Yangi ob'ektlarni yaratishda, agar kerak bo'lsa, u xotirani ajratadi, lekin ro'yxatdan o'tmagan ob'ektlar egallagan joyni qaytarib bermaydi. “ Gap nima? ", - deb so'raysiz. Ma'lum bo'lishicha, ushbu "axlat yig'ish" ikkita maqsadda qo'llaniladi:
  1. Avvalo, bu axlat yig'uvchi yangi GC algoritmlarining ishlashga ta'siri nuqtai nazaridan baholanishini ta'minlash uchun mo'ljallangan. Maqsad Epsilon bilan namunaviy dasturni ishga tushirish va ko'rsatkichlar to'plamini yaratishdir. Yangi axlat yig'ish algoritmi yoqilgan, bir xil testlar o'tkaziladi va keyin natijalar solishtiriladi.

  2. Juda qisqa vazifalar uchun (bulutdagi serversiz funksiyalarni o'ylab ko'ring), bu erda siz uyaga ajratilgan xotiradan oshib ketmasligingizga kafolat bera olasiz. Bu dastur kodidagi qo'shimcha xarajatlarni (jumladan, kollektorni ishga tushirish-qilmaslik to'g'risida qaror qabul qilish uchun zarur bo'lgan statistik ma'lumotlarni yig'ish) bartaraf etish orqali ishlashni yaxshilashi mumkin. Agar yig'ish maydoni tugasa, JVM uchta usuldan birida noto'g'ri sozlanishi mumkin:
    • Oddiy deyiladi OutOfMemoryError.
    • Uyumni qayta tiklashni amalga oshiring
    • JVM qattiq diski ishlamay qoldi va boshqa vazifani bajarayotgan bo'lishi mumkin (masalan, tuzatuvchini ishga tushirish).
[328]: Flight Recorder Flight Recorder JVM uchun past darajadagi ma'lumotlarni yig'ish tizimidir. JDK 11 dan oldin, bu Oracle JDK binarida tijorat xususiyati edi. Oracle endi Oracle JDK va OpenJDK dan bitta tuzilish o'rtasidagi funktsional farqlarni yo'q qilmoqda. Parvoz yozuvchisi nima qiladi :
  • Voqealar sifatida ma'lumotlarni ishlab chiqarish va iste'mol qilish uchun API taqdim etadi
  • Bufer mexanizmi va ikkilik ma'lumotlar formatini taqdim etadi
  • Hodisalarni moslashtirish va filtrlash imkonini beradi
  • OS, JVM HotSpot va JDK kutubxonalari uchun tadbirlarni taqdim eting
Bu yerda ikkita yangi modul mavjud: jdk.jfr va jdk.management.jfr . [329] ChaCha20 va Poly1305 kriptografik algoritmlari Ushbu JEP JDK tomonidan ishlatiladigan shifrlarni yangilash haqida . Bu holat RFC 7539 da koʻrsatilgan ChaCha20 va ChaCha20-Poly1305 shifrlash algoritmlarini amalga oshiradi. ChaCha20 eski, xavfsiz boʻlmagan RC4 shifrini almashtira oladigan nisbatan yangi oqim shifridir . [333] ZGC: Kengaytiriladigan past kechikishli axlat yig'uvchisi Tajribaviy kengaytiriladigan past kechikishli axlat yig'uvchisi. Katta (ko'p gigabaytli) to'p va past kechikishni talab qiladigan ilovalar bilan foydalanish uchun mo'ljallangan. U bitta avlod uyasidan foydalanadi va axlat yig'ish ishlarining ko'p qismini (lekin hammasi emas) dastur bilan bir vaqtda bajaradi. [332] Transport Layer Security (TLS) 1.3 TLS 1.3 (RFC 8446) TLS transport qatlami xavfsizligi protokoli uchun asosiy yamoq boʻlib, oldingi versiyalarga nisbatan sezilarli xavfsizlik va unumdorlikni oshirish imkonini beradi. JDK endi ushbu protokol versiyasini qo'llab-quvvatlaydi. Material Saymon Ritterning maqolasi va rasmiy hujjatlarga asoslangan .
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION