Java SE 17 sürümü

Altı aylık geliştirme sürecinin ardından Oracle, açık kaynaklı OpenJDK projesini referans uygulaması olarak kullanan Java SE 17'yi (Java Platform, Standard Edition 17) piyasaya sürdü. Bazı eski özelliklerin kaldırılması dışında, Java SE 17, 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 olmadan çalışacaktır. Java SE 17'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 17 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 17, Uzun Süreli Destek (LTS) sürümü olarak sınıflandırılmıştır ve 2029 yılına kadar güncelleme almaya devam edecektir. Önceki Java 16 dönüm noktası sürümüne ilişkin güncellemeler durduruldu. Java 11'in önceki LTS dalı 2026'ya kadar desteklenecektir. Bir sonraki LTS sürümünün Eylül 2024'te yayınlanması planlanıyor. Java 10'un çıkışıyla birlikte projenin yeni bir geliştirme sürecine geçtiğini, bunun da yeni sürümlerin oluşumu için daha kısa bir döngü anlamına geldiğini hatırlatalım. Yeni işlevsellik artık sürekli olarak güncellenen, hazır değişiklikleri içeren ve yeni sürümleri dengelemek için her altı ayda bir dallara ayrılan ana dalda geliştirilmektedir.

Java 17'deki yeni özellikler şunları içerir:

  • "Anahtar" ifadelerinde desen eşleştirmenin deneysel bir uygulaması önerilmiştir; bu, "durum" etiketlerinde kesin değerlerin kullanılmasına izin vermez, ancak daha önce hantal kullanılması gereken bir dizi değeri aynı anda kapsayan esnek şablonlar kullanılmasına izin verir. “if...else” ifadelerinin zincirleri. Ayrıca “switch” NULL değerleri işleyebilme özelliğine sahiptir. Nesne o = 123L; String formatlanmış = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); varsayılan -> o.toString(); };
  • Uygulamayı devralmak, genişletmek veya geçersiz kılmak için diğer sınıflar ve arayüzler tarafından kullanılamayan mühürlü sınıflar ve arayüzler için stabilleştirilmiş destek. Mühürlü sınıflar ayrıca, genişletme için izin verilen alt sınıfların açıkça listelenmesine dayalı olarak, bir üst sınıfın kullanımını erişim değiştiricilere göre kısıtlamak için daha bildirimsel bir yol sağlar. paket com.example.geometry; genel mühürlü sınıf Şekil izinleri com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • Vektör API'sinin, x86_64 ve AArch64 işlemcilerindeki vektör talimatları kullanılarak yürütülen vektör hesaplamaları için işlevler sağlayan ve işlemlerin aynı anda birden fazla değere (SIMD) uygulanmasına olanak tanıyan ikinci bir önizlemesi önerilmektedir. 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.
  • Uygulamaların Java çalışma zamanı dışındaki kod ve verilerle etkileşime girmesine olanak tanıyan Yabancı İşlev ve Bellek API'sinin önizlemesi eklendi. Yeni API, JVM dışı işlevleri verimli bir şekilde çağırmanıza ve JVM tarafından yönetilmeyen belleğe erişmenize olanak tanır. Örneğin, harici paylaşılan kitaplıklardan işlevleri çağırabilir ve JNI kullanmadan işlem verilerine erişebilirsiniz.
  • Java 2D API'ye güç veren ve daha sonra Swing API'ye güç veren macOS görüntü oluşturma motoru, Metal grafik API'sini kullanacak şekilde uyarlandı. MacOS platformu varsayılan olarak OpenGL'yi kullanmaya devam ediyor ve Metal desteğinin etkinleştirilmesi için "-Dsun.java2d.metal=true" ayarının yapılması ve en azından macOS 10.14.x'in çalıştırılması gerekiyor.
  • MacOS/AArch64 platformu için bir bağlantı noktası eklendi (yeni Apple M1 çiplerini temel alan Apple bilgisayarlar). Bağlantı noktasının özel bir özelliği, bellek sayfalarına yazma ve yürütme için aynı anda erişilemeyen W^X (Write XOR Execute) bellek koruma mekanizmasını desteklemesidir. (kod yalnızca yazma devre dışı bırakıldıktan sonra yürütülebilir ve bir bellek sayfasına yazmak yalnızca yürütme devre dışı bırakıldıktan sonra mümkündür).
  • Kayan nokta ifadeleri için yalnızca strictfp semantiğinin kullanılmasına geri dönüldü. Java 1.2'nin piyasaya sürülmesinden bu yana mevcut olan "varsayılan" anlambilim desteği, çok eski x87 matematik yardımcı işlemcilerine sahip sistemler üzerinde çalışmaya yönelik basitleştirmeler de dahil olmak üzere durduruldu (SSE2 talimatlarının ortaya çıkmasından sonra, ek anlambilime olan ihtiyaç ortadan kalktı).
  • Sahte rasgele sayı üreteçlerine yönelik yeni arayüz türleri uygulandı ve rasgele sayıların daha iyi üretilmesi için ek algoritmalar uygulandı. Uygulamalara sahte rastgele sayılar üretmek için bir algoritma seçme fırsatı verilir. Rastgele nesne akışları oluşturmaya yönelik geliştirilmiş destek.
  • Sun.misc.Unsafe gibi kritik API'ler hariç, tüm JDK dahili bileşenlerinin sıkı kapsüllenmesi uygulandı. Sıkı kapsülleme, koddan dahili sınıflara, yöntemlere ve alanlara erişim girişimlerini engeller. Daha önce katı kapsülleme modu "--illegal-access=permit" seçeneği kullanılarak devre dışı bırakılabiliyordu, ancak bu artık kullanımdan kaldırıldı. Dahili sınıflara, yöntemlere ve alanlara erişim gerektiren uygulamalar, bunları manifest dosyasındaki --add-opens seçeneğini veya Add-Opens özelliğini kullanarak açıkça tanımlamalıdır.
  • Uygulamalara, bağlama duyarlı olabilen ve belirli seri durumdan çıkarma işlemlerine göre dinamik olarak seçilebilen veri seri durumdan çıkarma filtrelerini tanımlama yeteneği verilmiştir. Belirtilen filtreler sanal makinenin tamamına (JVM çapında) uygulanabilir; yalnızca uygulamanın kendisini değil aynı zamanda uygulamada kullanılan üçüncü taraf kütüphaneleri de kapsar.
  • Swing, Yüksek DPI ekranlarda kullanıcı arayüzünü iyileştirmek amacıyla büyük simgeler yüklemek için javax.swing.filechooser.FileSystemView.getSystemIcon yöntemini ekledi.
  • Java.net.DatagramSocket API, ayrı bir java.net.MulticastSocket API'sine ihtiyaç duymadan Çok Noktaya Yayın gruplarına bağlanma desteği sağlar.
  • IGV (İdeal Grafik Görselleştirici) yardımcı programı geliştirildi ve HotSpot VM C2 JIT derleyicisinde ara kod gösteriminin etkileşimli görselleştirilmesi sağlandı.
  • JavaDoc'ta, javac derleyicisine benzer şekilde, bir hata çıktısı alındığında, kaynak dosyadaki sorunlu satırın numarası ve hatanın konumu artık belirtilir.
  • Sistem karakter kodlamasının (UTF-8, koi8-r, cp1251, vb.) adını yansıtan native.encoding özelliği eklendi.
  • Java.time.InstantSource arayüzü eklendi ve bir saat dilimine başvurmadan zaman manipülasyonuna izin verildi.
  • Onaltılı gösterime (ve tam tersi) dönüştürmek için java.util.HexFormat API'si eklendi.
  • Performans testleri yapılırken kullanılabilecek, ölü kod eleme işlemlerini devre dışı bırakan derleyiciye bir kara delik modu eklenmiştir.
  • Günlükleri eşzamansız modda kaydetmek için Çalışma Zamanı'na “-Xlog:async” seçeneği eklendi.
  • Güvenli bağlantılar kurarken, TLS 1.3 varsayılan olarak etkindir (daha önce TLS 1.2 kullanılıyordu).
  • Tarayıcıda Java uygulamalarını çalıştırmak için kullanılan, daha önce geçersiz olduğu bildirilen Applet API'si (java.applet.Applet*, javax.swing.JApplet), kaldırılmak üzere planlananlar kategorisine taşındı (destek sona erdikten sonra alaka düzeyi kayboldu) tarayıcılara yönelik Java eklentisi için).
  • Uzun zamandan beri alaka düzeyini kaybeden ve tarayıcı eklentisi desteğinin sona ermesinin ardından talep edilmeyen Güvenlik Yöneticisi, kaldırılması planlananlar kategorisine taşındı.
  • RMI Aktivasyon mekanizması kaldırılmıştır; bu mekanizma güncelliğini kaybetmiştir, Java 8'deki bir seçenek kategorisine girmiştir ve modern pratikte neredeyse hiç kullanılmamıştır.
  • HotSpot JVM için Java kodunun dinamik olarak derlenmesi için JIT'i (tam zamanında) destekleyen deneysel bir derleyici ve ayrıca sanal makineyi başlatmadan önce sınıfların makine koduna öngörücü derleme modunu (AOT, önceden) destekler , SDK'dan kaldırıldı. Derleyici Java'da yazılmıştır ve Graal projesinin çalışmasına dayanmaktadır. Derleyici bakımının çok fazla emek gerektirdiği ve geliştiricilerden talep olmadığında bunun haklı gösterilmeyeceği belirtilmektedir.

Kaynak: opennet.ru

Yorum ekle