Java SE 17 buraxılışı

Altı aylıq inkişafdan sonra Oracle, OpenJDK açıq mənbə layihəsindən istinad tətbiqi kimi istifadə edən Java SE 17 (Java Platform, Standard Edition 17) platformasını buraxdı. Bəzi köhnəlmiş xüsusiyyətlərin silinməsi istisna olmaqla, Java SE 17 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 17 (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 17 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 17 2029-cu ilə qədər yeniləmələri almağa davam edəcək Uzunmüddətli Dəstək (LTS) buraxılışı kimi təsnif edilir. Əvvəlki Java 16 mərhələ buraxılışı üçün yeniləmələr dayandırıldı. Java 11-in əvvəlki LTS filialı 2026-cı ilə qədər dəstəklənəcək. Növbəti LTS buraxılışı 2024-cü ilin sentyabrına planlaşdırılır. 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 17-da yeni xüsusiyyətlərə aşağıdakılar daxildir:

  • "Keçid" ifadələrində nümunə uyğunluğunun eksperimental tətbiqi təklif olunur ki, bu da "iş" etiketlərində dəqiq dəyərlərdən deyil, eyni anda bir sıra dəyərləri əhatə edən çevik şablonlardan istifadə etməyə imkan verir, bunun üçün əvvəllər çətin istifadə etmək lazım idi. “if...else” ifadələrinin zəncirləri. Bundan əlavə, “keçid” NULL dəyərləri idarə etmək qabiliyyətinə malikdir. Obyekt o = 123L; Sətir formatlaşdırıldı = keçid (o) { halda Tam ədəd i -> String.format("int %d", i); case Long l -> String.format("uzun %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
  • Möhürlənmiş siniflər və interfeyslər üçün stabilləşdirilmiş dəstək, digər siniflər və interfeyslər tərəfindən həyata keçirilməsini miras almaq, genişləndirmək və ya ləğv etmək üçün istifadə edilə bilməz. Möhürlənmiş siniflər, həmçinin genişləndirilməsi üçün icazə verilən alt siniflərin açıq-aşkar siyahıya alınmasına əsaslanaraq, giriş modifikatorlarına nisbətən superklassın istifadəsini məhdudlaşdırmaq üçün daha deklarativ üsul təqdim edir. com.example.geometry paketi; ictimai möhürlənmiş sinif Forma icazə verir com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Kvadrat {…}
  • 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ətbiqinə imkan verən vektor hesablamaları üçün funksiyaları təmin edən Vector API-nin ikinci baxışı təklif olunur. 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.
  • Tətbiqlərə Java işləmə müddətindən kənar kod və verilənlərlə qarşılıqlı əlaqə yaratmağa imkan verən Xarici Funksiya və Yaddaş API-nin önizləməsi əlavə edildi. Yeni API sizə JVM olmayan funksiyaları səmərəli şəkildə çağırmağa və JVM tərəfindən idarə olunmayan yaddaşa daxil olmağa imkan verir. Məsələn, siz JNI-dən istifadə etmədən xarici paylaşılan kitabxanalardan funksiyalara zəng edə və proses məlumatlarına daxil ola bilərsiniz.
  • Java 2D API-ni gücləndirən, o da öz növbəsində Swing API-ni gücləndirən macOS renderinq mühərriki Metal qrafika API-dən istifadə etmək üçün uyğunlaşdırılıb. macOS platforması defolt olaraq OpenGL-dən istifadə etməyə davam edir və Metal dəstəyini aktivləşdirmək üçün "-Dsun.java2d.metal=true" parametrinin təyin edilməsi və ən azı macOS 10.14.x-in işləməsi tələb olunur.
  • macOS/AArch64 platforması üçün port əlavə edildi (yeni Apple M1 çiplərinə əsaslanan Apple kompüterləri). Portun xüsusi xüsusiyyəti W^X (Write XOR Execute) yaddaş qoruma mexanizminin dəstəyidir ki, bu mexanizmdə yaddaş səhifələrinə eyni vaxtda yazı və icra üçün daxil olmaq mümkün deyil. (kod yalnız yazı deaktiv edildikdən sonra icra edilə bilər və yaddaş səhifəsinə yazmaq yalnız icra dayandırıldıqdan sonra mümkündür).
  • Üzən nöqtəli ifadələr üçün yalnız strictfp semantikasından istifadəyə qaytarıldı. Java 1.2-nin buraxılışından bəri mövcud olan "standart" semantikanın dəstəyi dayandırıldı, o cümlədən çox köhnə x87 riyaziyyat koprosessorları ilə sistemlərdə işləmək üçün sadələşdirmələr (SSE2 təlimatlarının meydana çıxmasından sonra əlavə semantikaya ehtiyac yox oldu).
  • Pseudor-təsadüfi ədəd generatorları üçün interfeyslərin yeni növləri tətbiq edilmiş və təsadüfi ədədlərin daha yaxşı generasiyası üçün əlavə alqoritmlər tətbiq edilmişdir. Tətbiqlərə psevdor təsadüfi nömrələr yaratmaq üçün alqoritm seçmək imkanı verilir. Təsadüfi obyekt axını yaratmaq üçün təkmilləşdirilmiş dəstək.
  • Sun.misc.Unsafe kimi kritik API-lər istisna olmaqla, bütün JDK daxili elementlərinin ciddi şəkildə inkapsulyasiyası tələb olunur. Ciddi inkapsulyasiya koddan daxili siniflərə, metodlara və sahələrə daxil olmaq cəhdlərini bloklayır. Əvvəllər ciddi inkapsulyasiya rejimi "--illegal-access=permit" seçimi ilə deaktiv edilə bilərdi, lakin bu, indi köhnəlmişdir. Daxili siniflərə, metodlara və sahələrə giriş tələb edən proqramlar manifest faylında --add-opens seçimindən və ya Add-Opens atributundan istifadə etməklə onları açıq şəkildə müəyyən etməlidir.
  • Tətbiqlərə kontekstdən asılı ola bilən və xüsusi seriyadan çıxarma əməliyyatları əsasında dinamik olaraq seçilə bilən verilənlərin seriyadan çıxarılması filtrlərini müəyyən etmək imkanı verilir. Göstərilən filtrlər bütün virtual maşına (JVM genişliyinə) tətbiq olunur, yəni. yalnız proqramın özünü deyil, həm də tətbiqdə istifadə olunan üçüncü tərəf kitabxanalarını əhatə edir.
  • Swing Yüksək DPI ekranlarında UI-ni təkmilləşdirmək üçün böyük nişanlar yükləmək üçün javax.swing.filechooser.FileSystemView.getSystemIcon metodunu əlavə etdi.
  • java.net.DatagramSocket API ayrıca java.net.MulticastSocket API-yə ehtiyac olmadan Multicast qruplarına qoşulmaq üçün dəstək verir.
  • HotSpot VM C2 JIT kompilyatorunda ara kod təqdimatının interaktiv vizuallaşdırılmasını təmin edən IGV (İdeal Qrafik Visualizer) yardım proqramı təkmilləşdirilmişdir.
  • JavaDoc-da, javac kompilyatoruna bənzətməklə, xəta çıxarıldıqda, mənbə faylındakı problemli xəttin nömrəsi və xətanın yeri indi göstərilir.
  • Sistem simvol kodlaşdırmasının adını əks etdirən native.encoding xassəsi əlavə edildi (UTF-8, koi8-r, cp1251 və s.).
  • Java.time.InstantSource interfeysi əlavə edildi və bu, vaxt qurşağına istinad etmədən vaxtın manipulyasiyasına imkan verir.
  • Onaltılıq təmsilə və əksinə çevirmək üçün java.util.HexFormat API əlavə edildi.
  • Kompilyatora performans testləri aparılarkən istifadə oluna bilən ölü kodların aradan qaldırılması əməliyyatlarını söndürən qara dəlik rejimi əlavə edilmişdir.
  • Asinxron rejimdə qeydləri qeyd etmək üçün Runtime-a “-Xlog: async” seçimi əlavə edildi.
  • Təhlükəsiz bağlantılar qurarkən, TLS 1.3 defolt olaraq aktivləşdirilir (əvvəllər TLS 1.2 istifadə olunurdu).
  • Brauzerdə Java proqramlarını işə salmaq üçün istifadə edilən əvvəllər elan edilmiş köhnəlmiş Applet API (java.applet.Applet*, javax.swing.JApplet) silinməsi nəzərdə tutulan kateqoriyaya köçürüldü (dəstək bitdikdən sonra aktuallığını itirdi) brauzerlər üçün Java plagini üçün).
  • Çoxdan aktuallığını itirmiş və brauzer plagininə dəstək bitdikdən sonra tələb olunmadığı ortaya çıxan Təhlükəsizlik Meneceri silinməsi planlaşdırılanlar kateqoriyasına köçürüldü.
  • Köhnəlmiş, Java 8-də seçim kateqoriyasına salınmış və müasir praktikada demək olar ki, istifadə edilməyən RMI Aktivləşdirmə mexanizmi çıxarılıb.
  • HotSpot JVM üçün Java kodunun dinamik tərtibi üçün JIT-i (tam vaxtda) dəstəkləyən eksperimental kompilyator, həmçinin virtual maşını işə salmazdan əvvəl siniflərin maşın koduna gözlənilən tərtibi (AOT, vaxtından əvvəl) rejimi , SDK-dan silindi. Kompilyator Java-da yazılmışdır və Graal layihəsinin işinə əsaslanır. Qeyd olunur ki, kompilyatora texniki qulluq çoxlu əmək tələb edir ki, bu da tərtibatçılardan tələb olmadıqda özünü doğrultmur.

Mənbə: opennet.ru

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