oracle

Java 17'de sunulan JEP'ler, yeni dil özelliklerinden çekirdek kitaplıklara yönelik iyileştirmelere, önizlemelere ve kuluçka makinelerine kadar çeşitlilik gösterir.

Java 17'de herkes için bir şeyler vardır. Yeni dil özellikleri mi istiyorsunuz? Mühürlü sınıflara ve kalıp eşleştirmenin önizlemesine göz atın. değiştirmek. Daha güçlü güvenlik mi arıyorsunuz? JDK 17, bağlama özel seri durumdan çıkarma filtreleri sunar. Yeni platformları önemsiyor musunuz? Artık ARM AArch64 mimarisine sahip 64-bit Mac'ler için JDK'nın bir sürümü var. Yıllarca süren istikrara ne dersiniz? Java SE 17, tıpkı Java 11 ve Java 8 gibi bir Uzun Süreli Destek (LTS) sürümüdür.

Resmi olarak Java 17'nin doğum günü (yani, genel kullanıma sunulduğunda) 14 Eylül 2021'dir, ancak 14 JEP'si elbette aylardır görünür durumdadır. Geliştiriciler kaynak koduyla oynuyor ve ikili dosyaları çalıştırıyor ve birçoğu yorumlara, hata raporlarına ve önerilere katkıda bulundu.

Java 17 ve JEP'lerinin her birine ilişkin teknik ayrıntılar için aşağıdaki kaynaklara bakın:

Java 17 aynı zamanda bir LTS sürümüdür; bu, onu uzun yıllar boyunca yamalar, düzeltmeler ve performans geliştirmeleriyle korunacağını bilerek dağıtabileceğiniz anlamına gelir. Bununla ilgili daha fazlasını Donald Smith'in makalesinde görebilirsiniz “Uzun vadeli destek sanatı ve LTS'nin Java ekosistemi için ne anlama geldiği

Aşağıda, Java 16 veya Java 11'den geçiş yapmayı düşünen uygulama geliştiren programcılar ve mimarlar için muhtemelen en alakalı olan dört JEP'i inceliyorum ve diğer evrimsel özellikleri de tartışacağım.

Dil özelliği: Mühürlü sınıflar (JEP 409)

Mühürlü sınıflar, JDK 17'de en çok beklenen nihai özellik olabilir ve bunlar JDK 16'da önizlendi. Kısacası, mühürlü sınıflar, diğer sınıfların (veya arayüzlerin) onları genişletebileceğini kısıtlar. Gibi JEP 409 açıklandığı gibi, mühürlü bir sınıf veya arayüz, yalnızca buna izin verilen sınıflar ve arayüzler tarafından genişletilebilir veya uygulanabilir. Bir sınıf uygulanarak mühürlenir Mühürlü bildiriminin değiştiricisi. Sonra, herhangi birinden sonra uzanır ve uygular hükümler, izinler yan tümcesi, mühürlü sınıfı genişletmesine izin verilen sınıfları belirtir. Bu sınıfların değişiklik yapmalarına açıkça izin verilmemişse, değişiklik yapamazlar.

Neden umursamalısın? Java SE ürün yönetimi müdürü Aurelio Garcia-Ribeyro'ya göre, "Mühürlü sınıflar, sonlu olduğunu bildiğim bir dizi seçenek oluşturmama izin veriyor ve bu, kodu basitleştiriyor çünkü o zaman sınıfları numaralarmış gibi ele alabilirim."

Mühürlü sınıflara sahip olmak, başka bir kodun kodunuzu geçersiz kılabileceği veya davranışını tahmin edemeyeceğiniz şekillerde değiştirebileceği endişesini ortadan kaldırdığını söylüyor. "Kimsenin bir kitaplığı gelecekte kodumu kıracak şekilde geliştiremeyeceğinin garantisini veriyor."

Çekirdek kitaplık yükseltmesi: Bağlama özel seri durumdan çıkarma filtreleri (JEP 415)

Bağlama özel seri kaldırma filtreleri, Java 9'da tanıtılan bir özellik üzerine kuruludur (bkz. JEP 290: Gelen serileştirme verilerini filtreleyin). Bu eski JEP, hem akış başına değiştirilebilir seri kaldırma filtreleri hem de JVM çapında statik bir filtre sunuyordu. Akış başına filtreler maalesef iyi ölçeklenmedi ve kod gönderildikten sonra filtreleri güncellemek zor. JEP 290'ın filtreleri, bir uygulamada üçüncü taraf kitaplıkları tarafından gerçekleştirilen seri durumdan çıkarma işlemlerine de filtreleme uygulayamaz. JVM çapında filtre, başlangıçta yalnızca bir kez belirtilmesi ve bazen çok kapsayıcı veya çok kısıtlayıcı olması bakımından sınırlıydı.

yeni işlevsellik JEP 415'te JVM çapında bir filtre fabrikası olarak sunulmaktadır. Filtreler dinamik ve bağlama özeldir. Geriye dönük uyumluluk için, bir filtre fabrikası ayarlanmamışsa, yerleşik fabrika, yapılandırılmışsa JVM çapında statik bir filtre döndürür.

Garcia-Ribeyro'ya göre sorun, bir geliştirici her işlem hattı oluşturduğunda, geliştiricinin izin verilenler listesi ve reddedilenler listesi de dahil olmak üzere filtrenin ne olduğunu tanımlaması gerektiğidir. Ancak Garcia-Ribeyro'ya göre, "Bir üçüncü taraf kitaplığı kullanıyorsam, onlar kendi akışlarını kullanıyorlar. JVM çapında bir filtre tanımlayabilirdim, ancak kitaplığın yapmak istediği her şeyi önceden bilmek zorundaydım. Bu çok çalışmayı gerektiriyordu.”

Buna karşılık, JEP 415 bir filtre fabrikası sağlar. "Bir filtre fabrikasıyla, seri durumdan çıkarma filtrelerinin kullanımı artık çok daha kolay," diyor, "o kadar ki, JDK 11 ve JDK 8'e kadar zaten üzerinde çalıştığımız ve iyileştirdiğimiz bir özellik bu."

JEP 415'i Java'nın eski sürümüne döndürmek için belirlenmiş bir zaman çerçevesi yok, ancak Garcia-Ribeyro ısrar ediyor, "Bunun üzerinde şiddetle çalışıyoruz."

Çekirdek kitaplık güncellemesi: Yeni macOS işleme ardışık düzeni (JEP 382)

Mac kullanıyor musunuz? Yapıyorum—dört çekirdekli i7 tabanlı MacBook Pro'm olmasaydı ne yapardım bilmiyorum. tarafından açıklanan yeni macOS işleme hattı 382 oldukça basittir: JVM'nin 2D grafiklerini, kullanımdan kaldırılmış Apple OpenGL API'sini kullanmaktan daha yenisine taşır. Elma Metal API'sı. Tabii ki, Java'yı arka uç iş yükleri için kullanıyorsanız, muhtemelen bunu umursamayacaksınız.

Apple, macOS Mojave 10.14'te OpenGL'yi aşamalı olarak kaldırmaya başladı, tavsiyede bulunarak, "OpenGL ve OpenCL çerçevelerindeki API'ler kullanımdan kaldırıldı ve uyumluluk amacıyla mevcut durumda. Uygulamanız OpenGL veya OpenCL kullanıyorsa Metal'e geçiş yapın."

Bu değişiklik hem Intel hem de ARM tabanlı Mac'ler için geçerlidir. Bu gizli bir değişikliktir. JEP 382 belgelerinin dediği gibi, "Değişiklikler macOS'a özgü kodla sınırlıdır ve orada bile Metal ve OpenGL arasında paylaşılan minimum miktarda kod güncellenir. Ne yeni Java API'leri sunduk ne de mevcut API'leri değiştirdik."

JEP 382 belgelerinde ayrıca, "Apple, OpenGL'nin yerini alan Metal çerçevenin üstün performansa sahip olduğunu iddia ediyor. Java 2D API için, bazı istisnalar dışında genellikle durum budur."

Şimdilik, Java 17 JVM varsayılan olarak OpenGL kullanacak; Metal'i yalnızca OpenGL yoksa veya kullanıcı bir komut satırı anahtarı atarsa kullanır. Ancak Garcia-Ribeyro, Mac kullanıcılarının yeni kodu denemelerini istiyor. "Bu yeni işleme hattını açmanızı istiyoruz. Mac'lerdeki mevcut grafik performansından daha hızlı veya en azından onunla aynı olmalıdır."

Önizleme: Anahtar için desen eşleştirme (JEP 406)

muhtemelen hakkında daha fazla şey duydum desen eşleştirme değiştirmek (JEP 406) diğer tüm JDK 17 özelliklerinden daha iyi ve Garcia-Ribeyro da bu konuda heyecanlı. "Bu özellik Java'yı herkes için daha iyi hale getiriyor" diyor ve "birkaç sürümde Java standardının bir parçası olacak."

Bu JEP, desen eşleştirme örneği (JEP 394), JDK 16 için sonlandırıldı. Yeni özellik iki büyük avantaj sunuyor.

  • Yapar değiştirmek kalıpların görünmesine izin vererek ifadeler çok daha programlanabilir ve esnektir. durum etiketler. JEP belgelerinden alıntı yapmak için, “Yalnızca değiştirmek birkaç türün değerleri hakkında - sayısal türler, numaralandırma türleri ve Sicim - ve yalnızca sabitlere karşı tam eşitliği test edebilirsiniz. Aynı değişkeni bir dizi olasılığa karşı test etmek için kalıpları kullanmak isteyebiliriz, her biri için belirli bir eylemde bulunabiliriz, ancak mevcut değiştirmek bunu desteklemiyor, bir zincirle sonuçlanıyoruz eğer...başka testler.”
  • Boş koşulları işlemek için daha zarif (ve geliştirici dostu) bir mekanizma sağlar. Yine alıntı yapmak gerekirse: “Geleneksel olarak, değiştirmek ifadeler ve ifadeler atmak NullPointerException seçici ifadesi null olarak değerlendirilirse, null için test anahtarın dışında yapılmalıdır… Bu, şu durumlarda makuldü: değiştirmek yalnızca birkaç referans türünü destekledi. Ancak, eğer değiştirmek herhangi bir türden seçici ifadeye izin verir ve vaka etiketlerinin tip desenleri olabilir, o zaman bağımsız boş testi keyfi bir ayrım gibi hissettirir ve gereksiz bir genelleme ve hata fırsatı davet eder.

Çoğu geliştiricinin, kalıp eşleştirmeyi denediğinde bunu bulacağını umuyorum. değiştirmek'Hayatım boyunca neredeydin' diyecekler.

d
d

Java 17'deki diğer yeni şeyler

Java 17'de gerçek bir yeni işlevsellik bereketi var. İşte araştırmaya değer birkaç öğe.

  • JVM dışında kod çağırmaya ve "yabancı" kaynaklara erişmeye yardımcı olan yabancı işlev ve bellek API'si şimdi kuluçkada. (Görmek JEP 412.)
  • Java artık daha iyi sözde rasgele sayı üreteçlerine sahip. (Görmek 356.)
  • Java, onaltılık değerlerle çalışmak için yeni yardımcı programlara sahiptir. (Görmek JDK-8251989.)
  • JDK 17'deki güvenlik anlaşmaları için varsayılan değer TLS 1.3'tür; Java'nın önceki sürümleri TLS 1.2 kullanıyordu. (Görmek JDK-8217633.)
  • AArm64 mimarisinde macOS'a bir Java bağlantı noktası vardır. (Görmek 391.)

Aşağıdakiler de dahil olmak üzere, kullanımdan kaldırma ve kaldırma işlemleri de vardır:

  • Java iç öğelerine harici erişim, aşağıdaki gibi birkaç istisna dışında, kapsülleme yoluyla kaldırıldı. sun.misc.Güvensiz. (Görmek 403.)
  • AOT ve JIT derleyicileri, HotSpot JVM'den kaldırıldı. (Görmek JEP 410.)
  • Applet API, kaldırılmak üzere kullanımdan kaldırılmıştır. (Görmek 398.)
  • Güvenlik Yöneticisi kaldırılmak üzere kullanımdan kaldırılmıştır. (Görmek JEP 411.)
  • Kerberos'taki zayıf 3DES ve RC4 güvenlik algoritmaları kullanımdan kaldırılmıştır. (Görmek JDK-8139348.)
  • Soket Uygulama Fabrika Mekanizması kullanımdan kaldırılmıştır. (Görmek JDK-8235139.)

Son olarak, Java 17'nin mevcut revizyonunu statik bir bağlantı aracılığıyla indirmenin yeni bir yolu var. Geçmişte, bir JDK'nın her artımlı nokta yayın sürümünün kendi URL'si vardı, bu da en son nokta sürümünün bir derleme komut dosyasına programlı olarak dahil edilmesini zorlaştırıyordu.

Garcia-Ribeyro, "Şimdi size kalıcı bir URL vereceğiz, böylece 'JDK 17'nin en son sürümünü edinin' yazan bir komut dosyası yazabilirsiniz," diye açıklıyor. "Ne zaman derlerseniz sizin için JDK 17'nin en son sürümünü almasını sağlayacak örnek bir Docker dosyamız bile olacak."

Çözüm

Bir kitabı kapağına göre yargılayamazsınız ve bir Java sürümünü JEP'lerini sayarak yargılayamazsınız. Java 17'deki değişiklikler Java 16'ya kıyasla önemlidir ve bir LTS sürümü olarak Java 17 platformu Java 11 veya Java 8'den önemli bir evrim gösterir. Eklenen dil özellikleri, çalışma zamanı geliştirmeleri, önizlemeler ve kuluçka makineleri ve kelimenin tam anlamıyla binlerce küçük düzeltme ile , Java 17, yeni Java platformu standardı olmaya hazır.

Daha derin kaz

 

Kaynak: https://blogs.oracle.com/post/java-jdk-17-generally-available-v2

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir