Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Java 25, uzun vadeli bir destek (LTS) sürümüdür ve bu da onu bugün Java 8, 11, 17 veya 21'de çalışan takımlar için doğal hedef haline getirir. Her LTS sürümü yılların güncelleştirmelerini ve güvenlik düzeltmelerini alır, bu nedenle Java 25'e geçmek, uygulamalarınızın desteklenmesine, güvenliğinin sağlanmasına ve en son performans ve dil iyileştirmelerini kullanabilmesine yardımcı olur.
Soru, daha yeni bir LTS sürümüne geçmeniz gerekip gerekmediğini değil, ne zaman. Ne kadar uzun süre beklerseniz, geçerli sürümünüzle desteklenen sonraki sürüm arasında o kadar fazla değişiklik birikir. Java 25'e geçmenin net avantajları vardır ve taşımayı daha sonra değil daha erken planlamak riski azaltır.
Java 8'den bu yana her sürümde özellikler ve geliştirmeler eklendi. BAŞLANGıÇ süresi, aktarım hızı, bellek kullanımı, ölçeklenebilirlik ve geliştirici üretkenliği geliştirmelerinin yanı sıra API'de dikkat çekici eklemeler ve değişiklikler vardır. Bu makalede, Java 11 LTS sürümünden bu yana sunulan Java sürümlerine odaklanılarak en etkili değişiklikler vurgulanır: Java 17, Java 21 ve Java 25.
Java 25'e geçiş
adım adım Java 25'e geçebilirsiniz. Eski bir JDK ile geliştirilen ve oluşturulan kodlar genellikle yeniden derleme olmadan Java 25'te çalıştırılabilir. Tüm önemli yükseltmelerde olduğu gibi, kaldırılan API'leri, kullanım dışı paketleri, iç API'lerin kullanımını ve özellikle de çöp toplamayla ilgili varsayılan davranış değişikliklerini izleyin.
Java 8 veya 11'den geliyorsanız, en geniş kapsamlı uyumsuzluk yaratan değişiklikleri ele almak için Java 8'den Java 11'e geçiş kılavuzuyla başlayın, ardından Java 17, 21 ve 25'e ilerleyin. Zaten Java 17 veya 21'deyseniz modül sistemi ve platform değişikliklerinin çoğu zaten arkanızda olduğundan Java 25'e taşıma işlemi genellikle daha küçüktür.
Tip
GitHub Copilot uygulaması modernleştirmesi uygulamanızı değerlendirmenize, yükseltmeyi planlamanıza ve kod değişikliklerini otomatik olarak uygulamanıza yardımcı olabilir. Java sürüm 8, 11, 17, 21 ve 25 arasındaki yükseltmeleri destekler, her değişiklik sonrasında projenizi derler ve test eder ve bu makalenin devamında açıklanan davranış değişikliklerini düzeltmeye yardımcı olur.
Tip
Eski bir JDK için ayarlanmış JVM bayrakları, Java 25'te kullanım dışı bırakılabilir, kaldırılabilir veya yetersiz duruma gelebilir. Eski ayarları taşımak yerine Java için Azure Komut Başlatıcısı'nın (jaz) JDK sürümüne ve kapsayıcı veya sanal makine kaynaklarınıza göre uyarlanmış JVM bayraklarını otomatik olarak uygulamasına izin vekleyebilirsiniz. Başlatma betiğinizde veya bundan yararlanmak için Dockerfile içinde java komutunu jaz ile değiştirin.
Java 11'den bu yana üst düzey değişiklikler
Bu bölüm, Java 8'den bu yana yapılan her değişikliği listelemez. Performans, ölçeklenebilirlik, tanılama, üretkenlik ve güvenlik üzerinde en büyük etkiye sahip değişiklikleri vurgular. Bu özelliklerin çoğu Java 17, 21 ve 25 sürümlerinde kullanıma sunuldu ve artık Java 25 ile elde ettiğiniz LTS temelinin bir parçasıdır. Her özellik, tümleştirildiği Java sürümünü not eder.
Sanal iş parçacıklarıyla ölçeklenebilirlik
[1] sanal iş parçacıkları, yüksek aktarım hızına sahip eşzamanlı uygulamalar yazma ve çalıştırma maliyetini önemli ölçüde azaltan, işletim sistemi yerine JVM tarafından yönetilen basit iş parçacıklarıdır. Sanal iş parçacıklarıyla, her istek için bir iş parçacığı kullanan basit bir tarzda kod yazabilir ve yine de çok sayıda eşzamanlı işleme ölçeklenebilirsiniz; bu da G/Ç ağırlıklı mikro hizmetler ve istek-yanıt iş yükleri için idealdir.
Sanal iş parçacıkları Java 21'de nihai hâle getirildi. Java 24, sanal iş parçacıklarının taşıyıcı iş parçacıklarını sabitlemeden senkronize olmasına izin vererek önemli bir sınırlamayı ortadan kaldırdı [2]; bu, synchronized bloklarını kullanan kodun ölçeklenebilirliğini artırdı.
Yapılandırılmış eşzamanlılık ve kapsamlı değerler
Kapsamlı değerler [3] sanal iş parçacıkları dahil olmak üzere iş parçacıkları içinde ve iş parçacıkları arasında sabit verileri paylaşmak için güvenli ve verimli bir yol sağlar. Bunlar, görev başına iş parçacığı modeliyle iyi çalışan iş parçacığı yerel değişkenlerine modern bir alternatiftir.
Yapılandırılmış eşzamanlılık [4] ilgili eşzamanlı görev gruplarını tek bir iş birimi olarak ele alır ve bu da hata işleme ve iptal işlemlerini basitleştirir. İlk kez Java 21'de önizlemesi sunulan bu özellik, gelişmeye devam ediyor ve sanal iş parçacıklarıyla doğal bir uyum içinde çalışıyor.
Dil üretkenliği
Java 14 ile Java 25 arasında sunulan bir dizi dil geliştirmesi kodu daha kısa, daha güvenli ve okunmasını kolaylaştırır:
-
Switch ifadeleri [5] (Java 14),
switchbir değer döndürmeyi ve daha sade bir ok söz dizimi kullanmayı sağlar. -
instanceofiçin desen eşleştirme [6] (Java 16), bir tür denetiminden sonra açık tür dönüşümü gereksinimini ortadan kaldırır. - Record’lar [7] (Java 16), sabit bir değer kümesi için saydam taşıyıcılar olarak değiştirilemez verileri modeller ve tekrarlayan kodu azaltır.
- Korumalı sınıflar [8] (Java 17), hangi sınıfların bir türü genişletebileceğini veya uygulayabileceğini denetlemenize olanak sağlar.
- Metin blokları [9] (Java 15), çok satırlı dize sabitlerini basitleştirir.
-
switchiçin desen eşleştirme [10] (Java 21) ve kayıt desenleri [11] (Java 21), karmaşık koşullu mantığı ve veri ayrıştırmayı açık ve güvenli bir şekilde ifade etmenizi sağlar. - Sıralı koleksiyonlar [12] (Java 21), ilk ve son öğelere erişim de dahil olmak üzere tanımlı bir karşılaşma sırasına sahip koleksiyonlar için tekdüzen bir API ekler.
- Adsız değişkenler ve desenler [13] (Java 22), kullanılmayan değişkenleri ve desen bileşenlerini açıkça işaretlemenize olanak sağlar.
- Modül içeri aktarma bildirimleri [14] (Java 25), tek bir bildirimle modülün dışarı aktarılan paketlerinin tamamını içeri aktarmanıza olanak sağlar.
- Kompakt kaynak dosyaları ve örnek ana yöntemleri [15] (Java 25) küçük programlar için gereken töreni azaltarak öğrenmeyi Java daha kolay ve prototip oluşturmayı hızlandırır.
-
Esnek oluşturucu gövdeleri [16] (Java 25),
super(...)veyathis(...)çağrısından önce deyimleri çalıştırmanıza olanak tanır; bu da doğrulamayı ve ilklendirmeyi iyileştirir.
Performans ve başlangıç
Çeşitli çalışma zamanı değişiklikleri aktarım hızını, bellek ayak izini ve başlangıç süresini geliştirir:
- Nesne üst bilgilerini sıkıştır [17] (Java 25), 64 bit platformlardaki nesne üst bilgilerinin boyutunu küçültür. Bu azaltma yığın kullanımını düşürür ve yoğun ayırmalı iş yükleri için performansı artırabilir.
- Sınıf veri paylaşımı (CDS), çalışma zamanında arşivlenmiş sınıfları bellek eşleme yoluyla başlatma süresini düşürür. Varsayılan CDS arşivleri [18] (Java 12) ve dinamik CDS arşivleri [19] (Java 13), bu özelliğin el ile eğitim çalıştırmaları olmadan benimsenerek daha kolay olmasını sağlar.
- Önceden sınıf yükleme ve bağlama [20] (Java 24), önceden gelen komut satırı ergonomisi [21] (Java 25) ve önceden yöntem profili oluşturma [22] (Java 25) ile birlikte, uygulama arşivinde yakalanan işleri yeniden kullanarak başlatma ve ısınma süresini kısaltın. Bu özellikler, Project Leyden'in Java daha hızlı başlama çabasının bir parçasıdır.
Bu iyileştirmeler özellikle hızlı başlangıç ve küçük ayak izi özellikleriyle doğrudan daha iyi ölçeklendirme ve daha düşük maliyet sunan buluta özel ve sunucusuz iş yükleri için değerlidir.
Çöp toplama
Java 25, çok çeşitli iş yükleri için uygun, olgunlaşmış ve düşük duraklamalı çöp toplayıcılarla birlikte sunulur:
- ZGC [23] (Java 15) ve Shenandoah [24] (Java 15), büyük yığınlarda düşük duraklama süreleri için tasarlanmış üretime hazır toplayıcılardır.
- G1GC varsayılan toplayıcı olmaya devam eder ve yerel kodla daha sorunsuz etkileşim için bölge sabitleme [25] (Java 22) dahil olmak üzere iyileştirmeler almaya devam eder.
- Generational ZGC [26] (Java 21), ayrı nesilleri koruyarak verimliliği artırır. Java 23 itibarıyla ZGC varsayılan olarak nesil modunda çalışır [27]ve nesil olmayan mod Java 24'te kaldırılmıştır.
- Generational Shenandoah [28] (Java 25), bellek baskısı altında daha iyi aktarım hızı ve dayanıklılık için Shenandoah toplayıcısına bir nesil modu ekler.
JVM, ortalama kullanım örneği için GC varsayılanlarını ayarlar. Uygulamanızın gereksinimlerine göre aktarım hızını veya gecikme süresini iyileştirmek için bu varsayılan ayarları ve diğer GC ayarlarını ayarlayın.
Tip
Varsayılan çöp toplayıcı ve birçok JVM varsayılanı Java sürümleri arasında farklılık gösterir, bu nedenle Java 8 veya 11 için ayarlanmış ayarlar artık Java 25'te en uygun olmayabilir. Java () jaz kapsayıcının cgroup belleğini ve CPU sınırlarını okur ve JDK sürümüne ve ortamına uyarlanmış JVM bayraklarını otomatik olarak uygular.
Tanılama ve gözlemlenebilirlik
Hem dilde hem de Java Flight Recorder'da (JFR) sürümler arasında tanılama geliştirildi:
-
Yararlı NullPointerExceptions [29] (Java 14) hangi değişkenin olduğunu
nulltam olarak açıklar ve bu da hata ayıklamayı hızlandırır. - JFR olay akışı [30] (Java 14), araçların döküm dosyasından değil profil oluşturma ve tanılama verilerini sürekli kullanmasına olanak tanır.
- JFR CPU süresi profillemesi [31] (Java 25), Linux'ta deneysel CPU süresi tabanlı metot profillemesi özelliğini ekler.
- JFR işbirliği örnekleme [32] (Java 25) yığın örnekleme kararlılığını artırır.
- JFR yöntemi zamanlaması ve izleme [33] (Java 25), uygulama kodunu değiştirmeden belirli yöntemleri zamanlayıp izlemenizi sağlar.
Güvenlik ve şifreleme
Java 25, kuantum sonrası dünya için hazırlık da dahil olmak üzere platformun güvenlik duruşunu güçlendirir:
- Edwards-Curve Dijital İmza Algoritması (EdDSA) [34] (Java 15) modern, yüksek performanslı bir imza düzeni ekler.
- Anahtar Kapsülleme Mekanizması API'si [35] (Java 21), KEM algoritmaları için standart bir API sağlar.
- Kuantuma dayanıklı şifreleme, modül-kafes tabanlı anahtar kapsülleme mekanizmasının (ML-KEM) [36] (Java 24) ve dijital imza algoritmasının (ML-DSA) [37] (Java 24) standart uygulamalarını ekler.
- Anahtar Türetme İşlevi API'si [38] (Java 25), anahtar türetme işlevleri için standart bir API sağlar.
Native ile birlikte çalışma
Yabancı İşlev ve Bellek API'si [39] (Java 22), yerel kitaplıkları çağırmak ve yerel belleğe erişmek için güvenli, verimli ve saf Java bir yol sağlar. Java Yerel Arabirimi’nin (JNI) yerine geçen, tekrarlayan kodu azaltan ve güvenliği artıran modern bir alternatiftir.
Araçlar ve kitaplıklar
Çeşitli eklemeler günlük geliştirmeyi geliştirir ve üçüncü taraf araçlara olan ihtiyacı azaltır:
-
Paketleme aracı (
jpackage) [40] (Java 16), Java uygulamalar için yerel yükleyiciler ve paketler oluşturur. - Basit Web Sunucusu [41] (Java 18), prototip oluşturma ve test için minimum statik dosya HTTP sunucusu sağlar.
- Gelişmiş pseudorandom sayı oluşturucuları [42] (Java 17) rastgele sayı oluşturma için yeni arabirimler ve uygulamalar ekler.
Planlanması gereken davranış değişiklikleri
Java 11'den bu yana yapılan bazı değişiklikler varsayılan davranışı değiştirdiğinden yükseltmeden önce bunları gözden geçirin:
- [43] (Java 17) JDK iç bileşenlerini kesin olarak kapsülleme, varsayılan olarak çoğu iç API'ye yansıtıcı erişimi engeller.
sun.*veya diğer iç paketlere erişen kodların ya da kitaplıkların güncellenmesi gerekebilir. - UTF-8 varsayılan olarak [44] (Java 18), UTF-8'i standart Java API'leri için varsayılan karakter kümesi yapar. Platforma özgü bir varsayılan karakter kümesine dayalı uygulamalar farklı davranabilir.
-
Kaldırılmak üzere finalization mekanizmasını kullanımdan kaldırma [45] (Java 18),
finalize()öğesinin sonunda kaldırılacağını belirtir.try-with-resources veyajava.lang.ref.Cleaneröğesine geçiş. - Aracıların dinamik yüklenmesine izin vermemeye hazırlanın [46] (Java 21), çalışan bir JVM'ye bir aracı yüklendiğinde uyarır. Bazı izleme ve izleme araçlarının yapılandırma değişiklikleri gerekebilir.
Tip
GitHub Copilot uygulaması modernleştirmesi, yükseltme sırasında bu davranış değişikliklerini otomatik olarak değerlendirmenize ve düzeltmenize yardımcı olabilir.
Kapsayıcılar ve bulut
Docker ve diğer kapsayıcı çalışma zamanları için kullanıma sunulan JVM'nin kapsayıcı farkındalığı gelişmeye devam ediyor. JVM, kapsayıcı denetim grupları (cgroups) tarafından ayarlanan CPU ve bellek kısıtlamalarını okur ve yığını ve diğer kaynakları uygun şekilde boyutlandırır. Daha hızlı başlatma, daha küçük bir ayak izi ve sanal iş parçacıklarıyla birlikte Java 25, Azure üzerinde kapsayıcılı ve sunucusuz dağıtımlar için çok uygundur.
Java iş yüklerini Azure kapsayıcılarda veya sanal makinelerde çalıştırırsanız, Java () jaz sizin için bulut için iyileştirilmiş, sürüme uygun JVM varsayılanlarını uygulayabilir.
Sonraki Adımlar
References
[1] Oracle Corporation, "JEP 444: Sanal İş Parçacıkları." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/444.
[2] Oracle Corporation, "JEP 491: Sabitleme olmadan Sanal İş Parçacıklarını Eşitle." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/491.
[3] Oracle Corporation, "JEP 506: Kapsamlı Değerler." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/506.
[4] Oracle Corporation, "JEP 453: Yapılandırılmış Eşzamanlılık (Önizleme)." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/453.
[5] Oracle Corporation, "JEP 361: Switch Expressions." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/361.
[6] Oracle Corporation, "JEP 394: instanceof için Örüntü Eşleme." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/394.
[7] Oracle Corporation, "JEP 395: Records." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/395.
[8] Oracle Corporation, "JEP 409: Mühürlü Sınıflar." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/409.
[9] Oracle Corporation, "JEP 378: Metin Blokları." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/378.
[10] Oracle Corporation, "JEP 441: Switch için Desen Eşleştirme." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/441.
[11] Oracle Corporation, "JEP 440: Kayıt Desenleri." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/440.
[12] Oracle Corporation, "JEP 431: Sıralı Koleksiyonlar." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/431.
[13] Oracle Corporation, "JEP 456: Adsız Değişkenler ve Desenler." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/456.
[14] Oracle Corporation, "JEP 511: Modül İçeri Aktarma Bildirimleri." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/511.
[15] Oracle Corporation, "JEP 512: Kompakt Kaynak Dosyaları ve Örnek Ana Yöntemleri." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/512.
[16] Oracle Corporation, "JEP 513: Esnek Oluşturucu Gövdeleri." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/513.
[17] Oracle Corporation, "JEP 519: Kompakt Nesne Üstbilgileri." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/519.
[18] Oracle Corporation, "JEP 341: Varsayılan CDS Arşivleri." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/341.
[19] Oracle Corporation, "JEP 350: Dinamik CDS Arşivleri." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/350.
[20] Oracle Corporation, "JEP 483: Zamanından Önce Sınıf Yükleme ve Bağlama." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/483.
[21] Oracle Corporation, "JEP 514: Önceden Komut Satırı Ergonomisi." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/514.
[22] Oracle Corporation, "JEP 515: Zamanından Önce Yöntem Profili Oluşturma." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/515.
[23] Oracle Corporation, "JEP 377: ZGC: Ölçeklenebilir, Düşük Gecikmeli Bir Çöp Toplayıcı." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/377.
[24] Oracle Corporation, "JEP 379: Shenandoah: A Low-Pause-Time Garbage Collector." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/379.
[25] Oracle Corporation, "JEP 423: G1 için Bölge Sabitleme." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/423.
[26] Oracle Corporation, "JEP 439: Generational ZGC." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/439.
[27] Oracle Corporation, "JEP 474: ZGC: Varsayılan Olarak Nesil Modu." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/474.
[28] Oracle Corporation, "JEP 521: Generational Shenandoah." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/521.
[29] Oracle Corporation, "JEP 358: Yararlı NullPointerException'lar." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/358.
[30] Oracle Corporation, "JEP 349: JFR Olay Akışı." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/349.
[31] Oracle Corporation, "JEP 509: JFR CPU Süresi Profilleme (Deneysel)." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/509.
[32] Oracle Corporation, "JEP 518: JFR İşbirlikçi Örnekleme." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/518.
[33] Oracle Corporation, "JEP 520: JFR Yöntemi Zamanlama ve İzleme." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/520.
[34] Oracle Corporation, "JEP 339: Edwards-Curve Dijital İmza Algoritması (EdDSA)." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/339.
[35] Oracle Corporation, "JEP 452: Anahtar Kapsülleme Mekanizması API'si." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/452.
[36] Oracle Corporation, "JEP 496: Kuantum Dirençli Modül-Kafes Tabanlı Anahtar Kapsülleme Mekanizması." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/496.
[37] Oracle Corporation, "JEP 497: Kuantum Dirençli Modül Kafes Tabanlı Dijital İmza Algoritması." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/497.
[38] Oracle Corporation, "JEP 510: Anahtar Türetme İşlevi API'si." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/510.
[39] Oracle Corporation, "JEP 454: Yabancı İşlev ve Bellek API'si." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/454.
[40] Oracle Corporation, "JEP 392: Paketleme Aracı." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/392.
[41] Oracle Corporation, "JEP 408: Simple Web Server." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/408.
[42] Oracle Corporation, "JEP 356: Gelişmiş Pseudo-Random Sayı Oluşturucuları." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/356.
[43] Oracle Corporation, "JEP 403: Strongly Encapsulate JDK Internals." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/403.
[44] Oracle Corporation, "JEP 400: UTF-8 varsayılan olarak." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/400.
[45] Oracle Corporation, "JEP 421: Finalization'ın kaldırılmak üzere kullanımdan kaldırılması." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/421.
[46] Oracle Corporation, "JEP 451: Aracıların Dinamik Yüklenmesine İzin Vermemeye Hazırlanın." (Çevrimiçi). Kullanılabilir: https://openjdk.org/jeps/451.