Altı aylık geliştirme sürecinin ardından Oracle, açık kaynak kodlu OpenJDK projesini referans uygulama olarak kullanan Java SE 18 platformunu (Java Platform, Standard Edition 18) yayınladı. Bazı kullanımdan kaldırılmış özelliklerin kaldırılması dışında, Java SE 18, Java platformunun önceki sürümleriyle geriye dönük uyumluluğu koruyor; daha önce yazılmış çoğu Java projesi yeni sürüm altında çalışırken değişmeden çalışmaya devam edecek. Java SE 18'nin (JDK, JRE ve Server JRE) kurulumu hazır sürümleri hazırlandı. Linux (x86_64, AArch64), Windows (x86_64) ve macOS (x86_64, AArch64). OpenJDK projesi tarafından geliştirilen Java 18 referans uygulaması, GNU ClassPath İstisnası ile birlikte GPLv2 lisansı altında tamamen açık kaynaklıdır ve ticari ürünlerle dinamik bağlantı kurulmasına olanak tanır.
Java SE 18, genel 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ı, 17 yılına kadar güncelleme almaya devam edecek olan Java SE 2029 olmalıdır. 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 18'deki yeni özellikler şunları içerir:
- Varsayılan kodlama UTF-8'dir. Metin verilerini karakter kodlamasına dayalı olarak işleyen Java API'leri, sistem ayarları ve yerel ayarlardan bağımsız olarak artık tüm platformlarda varsayılan olarak UTF-8'i kullanacak. Kodlamanın sistem yerel ayarına göre seçildiği eski davranışa geri dönmek için "-Dfile.encoding=COMPAT" seçeneğini kullanabilirsiniz.
- Paket, statik içerik sunmak için basit bir http sunucusunun uygulanmasıyla birlikte jwebserver yardımcı programını ve kitaplık API'sini içeren com.sun.net.httpserver paketini içerir (CGI ve sunucu uygulaması benzeri işleyiciler desteklenmez). Yerleşik HTTP sunucusu iş yükleri için optimize edilmemiştir ve öncelikli olarak projelerin prototip oluşturma, hata ayıklama ve test etme amaçlı geliştirme sürecinde kullanılması amaçlandığından erişim kontrolü ve kimlik doğrulamayı desteklemez.
- JavaDoc, doğrulama araçlarını, sözdizimi vurgulamayı ve IDE entegrasyonunu kullanabileceğiniz çalışma örneklerini ve kod parçacıklarını API belgelerine eklemek için "@snippet" etiketi desteği sağlar.
- Yöntemler, alanlar ve sınıf yapıcıları hakkında bilgi edinmenin yanı sıra sınıfların iç yapısına erişim sağlamak için tasarlanan java.lang.reflect API'sinin (Core Reflection) uygulaması yeniden tasarlandı. Java.lang.reflect API'sinin kendisi değişmeden kalmıştır ancak artık bayt kodu oluşturucuları kullanmak yerine Java.lang.invoke modülü tarafından sağlanan yöntem tanıtıcıları kullanılarak uygulanmaktadır. Değişiklik, Java.lang.reflect ve Java.lang.invoke uygulamalarını birleştirmemize ve bakımlarını basitleştirmemize olanak sağladı.
- Vector API'nin üçüncü bir önizlemesi önerildi; x86_64 ve AArch64 işlemcilerdeki 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 işlevler sağlandı. 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.
- Ana bilgisayar adlarını çözümlemek için SPI (hizmet sağlayıcı arayüzü) eklendi ve IP adresleriBu, java.net.InetAddress'in işletim sistemi tarafından sunulan işleyicilere bağlı olmayan alternatif çözümleyiciler kullanmasına olanak tanır.
- Uygulamaların Java çalışma zamanı dışındaki kod ve verilerle etkileşime girmesine olanak tanıyan Yabancı İşlev ve Bellek API'sinin ikinci bir önizlemesi sağlanır. 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.
- "Anahtar" ifadelerinde desen eşleştirmenin ikinci bir deneysel uygulaması eklendi; bu, daha önce kullanılması gerekli olan bir dizi değeri aynı anda kapsayan, "durum" etiketlerinde kesin değerler yerine esnek desenlerin kullanılmasına izin veriyor "if...else" ifadelerinin hantal zincirleri. 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(); };
- Sonlandırma mekanizması ve Object.finalize(), Enum.finalize(), Runtime.runFinalization() ve System.runFinalization() gibi ilişkili yöntemleri kullanımdan kaldırılmıştır ve gelecekteki bir sürümde devre dışı bırakılacaktır.
- ZGC (Z Çöp Toplayıcı), SerialGC ve ParallelGC çöp toplayıcıları satır tekilleştirmeyi destekler.
Kaynak: opennet.ru
