Geri qayıt
Project Valhalla: on illik iş JDK 28-ə gəlir — JEP 401 nəyi dəyişir
SiTech AI Team3 წთ. საკითხავი

Project Valhalla: on illik iş JDK 28-ə gəlir — JEP 401 nəyi dəyişir

Oracle mühəndisi Lois Foltan iyunun 15-də JEP 401-in OpenJDK-nın əsas deposuna daxil olduğunu və JDK 28-i hədəflədiyini təsdiqləyib. Xüsusiyyət preview kimi gəlir və bu, Valhalla layihəsinin yalnız ilk hissəsidir.

JEP 401 (Value Classes and Objects) OpenJDK-nın əsas deposuna inteqrasiya edilib və JDK 28-i hədəfləyir; bunu iyunun 15-də Oracle mühəndisi Lois Foltan təsdiqləyib. Dəyişiklik o qədər böyükdür ki, digər kommitterlərdən inteqrasiya zamanı böyük commit-lərdən çəkinmələri xahiş olunub: təkcə pull request 1 816 faylda 197 mindən çox sətir kod əlavə edir.

Xüsusiyyət preview kimi gəlir və standart olaraq söndürülüb, yəni yalnız --enable-preview bayrağı ilə işləyəcək. JEP-i nəzərdən keçirən Brayan Qots gözləntiləri dərhal tənzimlədi və bunu "Valhalla-nın yalnız ilk hissəsi" adlandırdı.

Problem: hər şey referansdır

Valhalla-nın şüarı başdan belədir: "sinif kimi kodlaşır, int kimi işləyir". Java-da səkkiz primitivdən başqa hər dəyər referansdır: dəyişən heap-dəki obyektə göstərici saxlayır, hər obyektin öz başlığı var və hər obyekt ayrılmalı, sonra garbage collector tərəfindən təmizlənməlidir. Milyon nöqtədən ibarət massiv praktikada yaddaşa səpələnmiş milyon qutuya işarə edən milyon göstəricidir — Brayan Qotsun "şişkin" adlandırdığı yerləşdirmə.

Sıxlıq vacibdir, çünki aparat təminatı dildən sürətli dəyişdi: prosessor yaddaşı 64 baytlıq keş sətirləri ilə oxuyur, beləliklə bitişik verilənlər bir anda bir neçə dəyər gətirir, göstərici arxasınca qaçmaq isə hit-dən yüz dəfə yavaş ola bilən keş buraxmaları riski yaradır.

JDK 28 nə gətirir

JEP 401 bir yeni anlayış təqdim edir: value modifikatoru ilə elan olunan value class və onun kimliyi olmayan value obyektləri. Eyni sahələrə malik iki ayrı yaradılmış value obyekti bir-birini əvəz edə bilir; buna görə == artıq ünvan müqayisəsi deyil, əvəzolunma testidir və belə tipdə synchronized IdentityException atır. Value siniflər standart olaraq final-dır, sahələri dolayısı ilə final-dır və metodları sinxronlaşdırıla bilməz; buna baxmayaraq onlar hələ də null ola bilər, çünki null-a icazə verməyən tiplər ayrı və daha sonrakı JEP-dir.

JVM iki optimizasiya qazanır. Skalyarlaşdırma JIT-ə value obyektini sahələrinə parçalamağa və ayırmadan tamamilə imtina etməyə imkan verir; heap flattening isə dəyəri birbaşa sahəyə və ya massiv hücrəsinə yazır. Düzləşdirilmiş verilənlər atomik oxunub yazılmalıdır; bu gün null bayrağı daxil olmaqla təqribən 64 bit deməkdir, ona görə bəzi kiçik siniflər yenə heap-də qalır. Preview açıq olduqda JDK-nın öz sarma sinifləri, məsələn Integer, value sinfinə çevrilir və bu, boxing xərcini nəzərəçarpacaq dərəcədə azaltmalıdır.

Hələ çatışmayanlar

İxtisaslaşdırılmış generiklər JDK 28-in hissəsi deyil. Tip silinməsinə görə generik kolleksiyaya qoyulan value obyekti yenə heap-də maddiləşir, yəni nöqtələrin ArrayList-i düz olmayacaq; düzləşdirmə birbaşa value tipinin sahələri və massivləri üçün işləyir. Null-a icazə verməyən tiplər, 128 bitlik kodlaşdırmalar və JEP 402-nin tam yetkin versiyası da gələcək işlərdir.

Layihənin özü 2014-cü ilə gedir — Ceyms Qoslinq o zaman onu "bir düyündə bağlanmış altı PhD" kimi təsvir etmişdi — və bugünkü formasına çatmazdan əvvəl beş prototipdən keçib. JDK 28 uzunmüddətli dəstək buraxılışı deyil: 2027-ci ilin martı üçün planlanır, növbəti LTS-in isə 2027-ci ilin sentyabrında JDK 29 olması gözlənilir. Erkən giriş qurmaları artıq jdk.java.net/valhalla ünvanında mövcuddur.

SSiTech

SiTech — AI ilə gücləndirilmiş veb hazırlanması

Sürətli və müasir saytlar qurur, AI-ı real biznes proseslərinə gətiririk. Layihəniz və ya sualınız var? Kömək etməyə hazırıq.