Java SE 22 platformasının buraxılışı və OpenJDK 22 açıq istinad tətbiqi

Altı aylıq inkişafdan sonra Oracle, OpenJDK açıq mənbə layihəsindən istinad tətbiqi kimi istifadə edən Java SE 22 (Java Platform, Standard Edition 22) platformasını buraxdı. Bəzi köhnəlmiş xüsusiyyətlərin silinməsi istisna olmaqla, Java SE 22 Java platformasının əvvəlki buraxılışları ilə geriyə uyğunluğu qoruyur - əvvəllər yazılmış Java layihələrinin əksəriyyəti yeni versiya altında işləyərkən heç bir dəyişiklik olmadan işləyəcək. Java SE 22 (JDK, JRE və Server JRE) quraşdırmaya hazır quruluşları Linux (x86_64, AArch64), Windows (x86_64) və macOS (x86_64, AArch64) üçün hazırlanmışdır. OpenJDK layihəsi tərəfindən hazırlanmış Java 22 istinad tətbiqi kommersiya məhsulları ilə dinamik əlaqəyə imkan vermək üçün GNU ClassPath istisnaları ilə GPLv2 lisenziyası altında tam açıqdır.

Java SE 22 müntəzəm dəstək buraxılışı kimi təsnif edilir və növbəti buraxılışa qədər yeniləmələri almağa davam edəcək. Uzunmüddətli Dəstək (LTS) filialı müvafiq olaraq 21 və 17-cu ilə qədər yeniləmələr alacaq (ümumiyyətlə 2031 və 2029-cı ilə qədər mövcuddur) Java SE 2028 və ya Java SE 2026 olmalıdır. Java SE 11-in LTS filialına ictimai dəstək ötən ilin sentyabrında başa çatdı, lakin genişləndirilmiş dəstək 2032-ci ilə qədər davam edəcək. Java SE 8-in LTS filialı üçün genişləndirilmiş dəstək 2030-cu ilə qədər davam edəcək.

Nəzərinizə çatdıraq ki, Java 10-un buraxılışından başlayaraq, layihə yeni buraxılışların formalaşması üçün daha qısa dövrü nəzərdə tutan yeni inkişaf prosesinə keçdi. Hazır dəyişiklikləri özündə cəmləşdirən və yeni buraxılışları sabitləşdirmək üçün hər altı aydan bir budaqlanan filiallardan ibarət daimi yenilənən bir master filialda yeni funksionallıq hazırlanıb.

Java 22-da yeni xüsusiyyətlərə aşağıdakılar daxildir:

  • G1 zibil kollektoruna regionun bərkidilməsi dəstəyi daxildir ki, bu da Java obyektlərinin zibil kollektoru tərəfindən köçürülməsinin qarşısını almaq və Java ilə yerli kod arasında təhlükəsiz şəkildə bu obyektlərə istinadların ötürülməsinə imkan vermək üçün yaddaşdakı Java obyektlərinin yerini müvəqqəti düzəltməyə imkan verir. Saxlama, JNI-nin (Java Native Interface) kritik bölgələrini yerli kodla yerinə yetirərkən gecikmə müddətini azaltmağa və zibil yığımının dayandırılmasının qarşısını almağa imkan verir (bu bölmələri yerinə yetirərkən JVM yarış şəraitindən qaçmaq üçün onlarla əlaqəli kritik obyektləri köçürməməlidir). Saxlama kritik obyektləri zibil kollektorunun gözündən uzaqlaşdırır və bu, bağlanmamış sahələri təmizləməyə davam edə bilər.
  • Super(...) çağırmazdan əvvəl konstruktorlarda ifadələrin müəyyən edilməsinə icazə vermək üçün ilkin xüsusiyyət əlavə edilmişdir, əgər bu ifadələr konstruktor tərəfindən yaradılmış instansiyaya aid deyilsə, irsi sinif konstruktorundan ana sinif konstruktorunu açıq şəkildə çağırmaq üçün istifadə olunur. class Outer { void hello() { System.out.println("Salam"); } class Inner { Inner() { salam(); super(); } } }
  • JNI (Java Native Interface) istifadə etmədən xarici kitabxanalardan funksiyaları çağırmaq və JVM-dən kənar yaddaşa daxil olmaq yolu ilə Java proqramlarının xarici kod və verilənlərlə qarşılıqlı əlaqəsinə imkan verən FFM (Xarici Funksiya və Yaddaş) API stabilləşdirilib.
  • Adsız dəyişənlər və nümunə uyğunluğu üçün dəstək işə salındı ​​- zəng edərkən istifadə edilməmiş, lakin zəruri dəyişənlər və nümunələr əvəzinə, indi "_" simvolunu təyin edə bilərsiniz. // idi String pageName = switch (səhifə) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> “ISSUE #” + issueNumber; ... }; // indi siz String pageName = switch (səhifə) { case GitHubIssuePage(_, _, _, int issueNumber) -> “ISSUE #” + issueNumber; };
  • Java sinif fayllarını təhlil etmək, yaratmaq və çevirmək üçün Class-File API-nin ilkin tətbiqi təklif olunur. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bayt); bayt[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instance of MethodModel mm && mm.methodName().stringValue(). startsWith("debug"))) { classBuilder.with(ce);
  • Java yardım proqramı bir neçə kod faylı və ya əvvəlcədən tərtib edilmiş sinif kitabxanaları şəklində təqdim olunan Java proqramlarını bu faylları ayrıca tərtib etmədən və qurma sistemini konfiqurasiya etmədən işə salmaq imkanı verir. Yeni funksiya müxtəlif siniflərin kodunun ayrı-ayrı fayllara ayrıldığı proqramları işə salmağı asanlaşdırır. Prog.java: class Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Helper { static void run() { System.out.println("Salam!"); } }

    Məsələn, "Prog.java" və "Helper.java" adlı iki fayldan ibarət proqramı işə salmaq üçün indi Prog sinfini kompilyasiya edəcək, Helper sinfinə istinad təyin edəcək "java Prog.java"-nı işə salmaq kifayətdir. Köməkçi faylı tapın və tərtib edin və əsas metodu çağırın.

  • Sətir hərfi və mətn bloklarına əlavə olaraq həyata keçirilən String Şablonlarının ikinci ilkin tətbiqi əlavə edildi. Simli şablonlar + operatorundan istifadə etmədən mətni hesablanmış ifadələr və dəyişənlərlə birləşdirməyə imkan verir. İfadələrin dəyişdirilməsi \{..} əvəzetmələrindən istifadə etməklə həyata keçirilir və əvəz edilmiş qiymətlərin düzgünlüyünü yoxlamaq üçün xüsusi işləyicilər qoşula bilər. Məsələn, SQL mühərriki SQL koduna əvəz edilən dəyərləri yoxlayır və çıxış kimi java.sql.Statement obyektini qaytarır, JSON prosessoru isə JSON əvəzetmələrinin düzgünlüyünə nəzarət edir və JsonNode qaytarır. Sətir sorğusu = "SEÇ * FROM Şəxs p HARADA p." + xassə + " = '" + dəyər + "'"; // idi İfadə sorğusu = SQL."""SEÇ * FROM Şəxs p HARADA p.\{mülk} = '\{dəyər}'"""; // oldu
  • X86_64 və AArch64 prosessorlarında vektor təlimatlarından istifadə etməklə yerinə yetirilən və əməliyyatların eyni vaxtda birdən çox dəyərə (SIMD) tətbiq edilməsinə imkan verən vektor hesablamaları üçün funksiyaları təmin edən Vektor API-nin yeddinci önizləməsi əlavə edildi. Skayar əməliyyatların avtomatik vektorlaşdırılması üçün HotSpot JIT kompilyatorunda təqdim edilən imkanlardan fərqli olaraq, yeni API paralel verilənlərin emalı üçün vektorlaşdırmanı açıq şəkildə idarə etməyə imkan verir.
  • Genişləndirilmiş Stream API-nin ilkin tətbiqi əlavə edilmişdir ki, bu da öz aralıq əməliyyatlarınızı təyin etməyi dəstəkləyir, bu da mövcud daxili aralıq əməliyyatların istənilən məlumatın dəyişdirilməsi üçün kifayət etmədiyi hallarda faydalı ola bilər. Doğma işləyicilər axın elementlərini onlara istifadəçi tərəfindən müəyyən edilmiş işləyici tətbiq etməklə emal edən yeni aralıq əməliyyatı Stream::toplay(Gatherer) vasitəsilə birləşdirilir. jshell> Stream.of(1,2,3,4,5,6,7,8,9). toplamaq(yeni WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • Structured Concurrency üçün eksperimental API-nin ikinci versiyası sınaq üçün təklif edilmişdir ki, bu da müxtəlif tellərdə yerinə yetirilən çoxsaylı tapşırıqları bir blok kimi emal etməklə çox yivli proqramların işlənməsini asanlaşdırır.
  • Açıq/statik bəyannamələrdən, arqumentlər massivindən və sinif bəyannaməsi ilə əlaqəli digər obyektlərdən imtina edə bilən "əsas" metodun gizli elan edilmiş siniflərin və adsız nümunələrinin ikinci ilkin tətbiqi əlavə edildi. // ictimai sinif idi HelloWorld { public static void main(String[] args) { System.out.println("Salam dünya!"); } } // indi siz main() funksiyasını ləğv edə bilərsiniz { System.out.println("Salam, Dünya!"); }
  • Dəyişməz məlumatların başlıqlar arasında paylaşılmasına və verilənlərin uşaq mövzuları arasında səmərəli şəkildə mübadiləsinə imkan verən (dəyərlər miras alınır) Scoped Values-in ikinci önizləmə tətbiqi əlavə edildi. Scoped Dəyərlər yivli yerli dəyişənlər mexanizmini əvəz etmək üçün hazırlanır və çox sayda virtual başlıqdan (minlərlə və ya milyonlarla ipdən) istifadə edərkən daha səmərəlidir. Scoped Values ​​və thread-lokal dəyişənlər arasındakı əsas fərq ondan ibarətdir ki, birincilər bir dəfə yazılır, gələcəkdə dəyişdirilə bilməz və yalnız ipin icrası müddətində əlçatan qalır.
  • Paralel zibil kollektoru obyektlərin böyük massivləri ilə işləyərkən performansını artırmışdır. Optimallaşdırma obyektlərin axtarışına başlamazdan əvvəl gecikməni 20% azaltmağa imkan verdi.

Bundan əlavə, JavaFX 22 qrafik interfeysi ilə proqramlar yaratmaq üçün platformanın yenilənməsinin dərcini qeyd edə bilərsiniz.

Mənbə: opennet.ru

Добавить комментарий