Java SE 23 ve OpenJDK 23 yayınlandı

Altı aylık geliştirme sürecinin ardından Oracle, açık kaynaklı OpenJDK projesini referans uygulaması olarak kullanan Java SE 23 platformunu (Java Platform, Standard Edition 23) yayınladı. Bazı eski özelliklerin kaldırılması haricinde, Java SE 23, Java platformunun önceki sürümleriyle geriye dönük uyumluluğu korur; daha önce yazılan Java projelerinin çoğu, yeni sürüm altında çalıştırıldığında değişiklik yapılmadan çalışacaktır. Java SE 22'nin (JDK, JRE ve Sunucu JRE) kuruluma hazır yapıları Linux (x86_64, AArch64), Windows (x86_64) ve macOS (x86_64, AArch64) için hazırlanmıştır. OpenJDK projesi tarafından geliştirilen Java 23 referans uygulaması, ticari ürünlerle dinamik bağlantıya izin veren GNU ClassPath istisnalarıyla GPLv2 lisansı altında tamamen açık kaynaktır.

Java SE 23, normal destek sürümü olarak sınıflandırılmıştır ve bir sonraki sürüme kadar güncellemeleri almaya devam edecektir. Uzun Süreli Destek (LTS) dalı, sırasıyla 21 ve 17'a kadar güncellemeleri alacak olan Java SE 2031 veya Java SE 2029 olmalıdır (genel olarak 2028 ve 2026'ya kadar mevcuttur). Java SE 8'in LTS şubesi için genişletilmiş destek 2030'a, Java SE 11 ise 2032'ye kadar sürecek.

Java SE'de önerilen 23 yenilik arasında:

  • ZGC (Z Kuşağı Çöp Toplayıcı) çöp toplayıcının üretken çalışma modu, "eski" ve "yeni" nesnelerin ayrı ayrı işlenmesi kullanılarak varsayılan olarak etkindir; bu, kısa ömürlü yeni oluşturulan nesnelerin temizlenmesi verimliliğini artırır. Generational ZGC'nin kullanılması, kaynak tahsisi sırasında durma riskini azaltır, çöp toplama sırasında CPU yükünü ve bellek tüketimini azaltır. Generational ZGC'nin Apache Cassandra 4 ile test edilmesi, sabit yığın boyutuyla aktarım hızında 4 kat artış ve sabit aktarım hızıyla yığın boyutunda dörtte bir azalma gösterdi.
  • JavaDoc, yorumlardaki kodu belgelemek için HTML ve JavaDoc @ etiketlerinin karışımı yerine kullanılabilecek Markdown'ı kullanma desteğini ekledi.
    Java SE 23 ve OpenJDK 23 yayınlandı
  • Desen eşleştirme mekanizmaları, her türlü şablonda, "instanceof" ifadesinde ve "switch" bloklarında ilkel türlerin (int, byte, char ve diğer nesne olmayan temel türler) kullanımına yönelik ön destek ile geliştirilmiştir. switch (x.getStatus()) { case 0 -> “tamam”; durum 1 -> “uyarı”; durum 2 -> “hata”; case int i -> “bilinmeyen durum: ” + i; } if (i bayt örneği b) { … b … }
  • Belirli bir modül tarafından dışa aktarılan tüm paketleri bir kerede içe aktarmak için tek bir "içe aktarma modülü M" ifadesinin kullanılmasına yönelik ön destek eklendi. Değişiklik, modüler kitaplıkların yeniden kullanımını önemli ölçüde basitleştirerek, paket hiyerarşisindeki yerlerini belirlemeden kitaplıkları ve sınıfları eklemenize olanak tanır. Örneğin, "java.base modülünü içe aktar" seçeneğinin belirtilmesi, java.base modülünde bulunan 54 paketin tümünü içe aktaracaktır; bu daha önce ayrıca belirtilmesi gereken ("import java.io.*", "import java.util.*) " vesaire.).

    Java sınıfı dosyalarının ayrıştırılması, oluşturulması ve dönüştürülmesi için Sınıf Dosyası API'sinin ikinci bir ön uygulaması önerilmektedir. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bayt); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce exampleof MethodModel mm && mm.methodName().stringValue(). başlarWith("hata ayıklama"))) { classBuilder.with(ce);

  • Vector API'nin sekizinci önizlemesi, x86_64 ve AArch64 işlemcilerdeki vektör talimatları kullanılarak yürütülen vektör hesaplamalarına yönelik işlevler sağlar ve işlemlerin aynı anda birden fazla değere (SIMD) uygulanmasına olanak tanır. Skaler işlemlerin otomatik vektörleştirilmesi için HotSpot JIT derleyicisinde sağlanan yeteneklerin aksine, yeni API, paralel veri işleme için vektörleştirmenin açıkça kontrol edilmesini mümkün kılar.
  • Seçilen yerel ayara göre metni biçimlendirmek, görüntülemek ve okumak için java.io.Console sınıfına format, printf, readPassword ve readLine yöntemleri eklendi. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", new Date()) 2024-mai-16 jeudi
  • Kendi ara işlemlerinizi tanımlamayı destekleyen, genişletilmiş Stream API'nin ikinci bir önizleme uygulaması eklenmiştir; bu, mevcut yerleşik ara işlemlerin istenen veri dönüşümü için yeterli olmadığı durumlarda yararlı olabilir. Yerel işleyiciler, akış öğelerini kullanıcı tanımlı bir işleyici uygulayarak işleyen yeni ara işlem Stream::gather(Gatherer) kullanılarak bağlanır. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • Örtülü olarak bildirilen sınıfların ve "ana" yöntemin adsız örneklerinin üçüncü bir ön uygulaması eklendi; bu, genel/statik bildirimlerden, bir dizi argüman iletmeden ve bir sınıf bildirimiyle ilişkili diğer varlıklardan vazgeçebilir. // genel sınıftı MerhabaDünya { public static void main(String[] args) { System.out.println("Merhaba dünya!"); } } // şimdi void main() { System.out.println("Merhaba, Dünya!"); }
  • Yapıcıların super(...) çağrılmadan önce ifadeleri belirtmesine olanak tanıyan bir özelliğin ikinci bir önizlemesi eklendi; bu özellik, eğer bu ifadeler yapıcı tarafından oluşturulan bir örneğe başvuruyorsa, devralınan bir sınıfın yapıcısından açıkça bir üst sınıfın yapıcısını çağırmak için kullanılır. class Outer { void hello() { System.out.println("Merhaba"); } class İç { İç() { merhaba(); süper(); } } }
  • Kapsamlı Değerlerin üçüncü bir önizleme uygulaması eklendi; bu, değişmez verilerin iş parçacıkları arasında paylaşılmasına ve alt iş parçacıkları arasında verimli bir şekilde veri alışverişine izin verdi (değerler devralındı). Kapsamlı Değerler, iş parçacığı-yerel değişkenler mekanizmasının yerini alacak şekilde geliştirilmektedir ve çok büyük sayıda sanal iş parçacığı (binlerce veya milyonlarca iş parçacığı) kullanıldığında daha verimlidir. Kapsamlı Değerler ile iş parçacığı yerel değişkenleri arasındaki temel fark, ilkinin bir kez yazılması, gelecekte değiştirilememesi ve yalnızca iş parçacığının yürütüldüğü süre boyunca kullanılabilir kalmasıdır.
  • Yapılandırılmış Eşzamanlılık API'sinin üçüncü bir önizlemesi, farklı iş parçacıklarında çalışan birden fazla görevi tek bir blok olarak işleyerek çok iş parçacıklı uygulamaların geliştirilmesini basitleştiren, test için önerildi.
  • sun.misc.Unsafe sınıfı tarafından sağlanan harici bellek erişim yöntemleri (JVM dışında) kullanımdan kaldırıldı ve kaldırılması planlandı. Yığın dışı belleğe erişmek ve harici kodla etkileşim kurmak için VarHandle API'sinin ve FFM (Yabancı İşlev ve Bellek) API'sinin kullanılması önerilir.

Ek olarak, JavaFX 23 grafik arayüzü ile uygulamalar oluşturmak için platformda bir güncellemenin yayınlandığını ve GraalVM JIT derleyicisinin ana Oracle JDK 23'e dahil edildiğini not edebiliriz.

Ayrıca, JavaScript (Node.js), Python, Ruby, R, JVM için herhangi bir dil (Java, Scala, Clojure, Kotlin) ve dillerde çalışan uygulamaları destekleyen evrensel sanal makine GraalVM'nin yeni bir sürümü de sunulmaktadır. ​LLVM bit kodunun oluşturulabileceği (C, C++, Rust). Yeni sürüm, JDK 23'ü desteklemenin yanı sıra bellek tüketimini ve yürütülebilir kodun boyutunu optimize ediyor ve JIT derlemesini kullanarak Python ve WebAssembly'ı Java koduna yerleştirmeye yönelik araçlar için tam destek sağlıyor.

Kaynak: opennet.ru

Yorum ekle