OpenJDK 25'in yayının 16 Eylül 2025 için planlanıyor. Bu sefer 18 JEP planlanıyor (JDK Güçlendirme Teklifleri). Bu Java 24'ten biraz daha az, ancak bu sefer bazı özellikler önceki önizlemelerden sonra hedefleniyor. Buna ek olarak, Java 25 için çoğu distribütör tekrar genişletilmiş destek sunar (LTS). Birçok Java projesi önümüzdeki aylarda en son sürümlerden 21'den 25'e değişecek.
Geliştiricilerin bakış açısından en ilginç noktalara ilk bakıyoruz. İlgili JEP aracılığıyla daha fazla ayrıntı anlaşılabilir. Bu nedenle ikinci bir yazıda, kaputun altında daha gizli değişikliklerin veya Java geliştiricileri için çok alakalı olmadığını düşünüyoruz. Bu arada, bu makalede açıklanan JEP'lerin çoğu, önceki Java sürümlerinde bir inkübatör veya önizleme olarak yayınlanmış olan kararlardır. Son alanların başlatılmasında daha fazla esneklik sağlayan istikrarlı değerler yepyenidir.
Jep 502: Kararlı değerler
Kararlı değer tam olarak bir kez kullanılan ve bu nedenle değişmez olan nesnelerdir. JVM (Java sanal makinesi) içeriğini gerçek bir sabit olarak ele alır ve son alanlarda olduğu gibi aynı optimizasyonları (örneğin sürekli katlama) uygulayabilir – yalnızca başlatma geç gerçekleştirilebilir. Bu, Java'ya güvenlik riskleri olmadan iplik almadan başlangıç ve sıcak zamanları kısaltan bir “ertelenmiş değişmezlik” verir. Amaçlar:
- Hızlı Başlat -up: Tüm bileşenlerin artık monolitik başlatılması yok.
- Değişmez bir değerin üretiminin diskalifiye edilmesi ve başlatılması – performans maliyetleri olmadan.
- İlk kez de yüksek paralel senaryolarda başlatılmasının garantisi.
- Yalnızca JDK dahili kodu için değil, uygulama kodu için erişilebilir sabit optimizasyonlar yapın.
İstikrarlı değerler saf bir kütüphane FIR'dır. Yeni anahtar kelime olmayacak. Buna ek olarak, nihai kodun anlambiliminde bir değişiklik yoktur ve mevcut kalıntılar değişmez. Şimdiye kadar, endişeli son alanlar (hemen) başlatılmalıdır: bir logger veya bir veritabanı bağlantısının başlatılması, programın başlangıcını frenler. Tembel destek, çift kontrol kilidi veya ConcurrentHashMap.computeIfAbsent
Sınırlıdır, hatalara eğilimlidir veya JIT optimizasyonlarını önler (tam zamanında). Kararlı değerler, titiz değişmezlik ve esnek tembel başlatma arasındaki boşluğu doldurur.
Lambda'nın ifadesi orElseSet
Farklı sanal iş parçacıkları olsa bile tam olarak bir kez garanti edilir logger()
Arama. Daha sonra, JIT (tam zamanında Hotspot VM'nin derleyicisi) sabit katlama ile olduğu gibi tüm erişimi optimize edebilir.
class OrderController {
private final StableValue<Logger> logger = StableValue.of();
private Logger logger() {
return logger.orElseSet(() -> Logger.create(OrderController.class));
}
}
Kararlı değer özellikle paralel programlama için ilginçtir. Sanal tel alanında, geliştirme ekibi uzun süre diğer tuğlalarda çalıştı. Yapılandırılmış rekabet altıncı kez bir önizleme olsa da, izin verilen değerler artık dört önizlemeden sonra bir final olarak kabul edilmektedir.
JEP 506 – Kapsamlı Değerler (JDK 25'teki Final)
Genişletilmiş değerler, küresel bir duruma farklı erişim ipliklerine izin veren dişlokal değişkenlere bir alternatiftir. Threadlocal istendiği gibi değiştirilebilir, sınırsız bir süreye sahiptir (özellikle havuzlarda kayıp riski) ve miras tarafından çocukların ipliklerine daha pahalıdır. Genişletilmiş değerler, yaşam süresini açıkça sınırlar, sadece okunur ve birçok iplikte boşluk ve zaman açısından kullanılabilir. API önizlemelere yöneliktir. Sadece değişiklik: ScopedValue.orElse
Kabul yok null
Dahası. Örneğin, bir web çerçevesi çerçeve bağlamını bağlar (örneğin Spring ApplicationContext veya bir kimlik doğrulama bağlamı). Yöneticinin ve dahili çerçevenin (DB erişimi gibi) çağrıları her zaman ek bir parametre olarak aşılmadan çerçevenin bu bağlamına erişebilir. Ve ayrıca çocukların (sanal) ipliklerinde otomatik olarak mevcuttur.
JEP 505 – Yapılandırılmış Rekabet (önizleme)
StrucudiedTasksKope ile bir API, CO -Freedom ile birim olarak bir araya gelen yolunu alır: Subtatonlar blokta incelenir ve bir ortak () aracılığıyla toplanır. Gerekirse, hatalar diğer subtacs'ın doğrudan yıkılmasını garanti eder. Hata ayıklama sırasında, iplik dökümlerinde faaliyet hiyerarşisinin anlaşılması kolaydır. Bu nedenle yapılandırılmış rekabet, özellikle lesing ve bekleme yolunda uygulanmaya izin verir. Alternatif olarak, geliştiriciler şimdiye kadar bu amaç için akışların, yürütme hizmetinin veya reaktif programlamanın paralelini kullanabildiler. Basit uygulamaları gereksiz yere karmaşık hale getiren ve hatalara meyilli hale getiren çok güçlü yaklaşımlar.
Son Önizleme Haberleri: AMP'ler Statik Fabrika Yöntemleri Kullanarak Açık olabilir (open()
Standart durum için veya herkes başarılıdır veya hata durumunda her şey durdurulur). Alternatif nihai politikalar ve iade değerleri Joine tabanlı tabanlıdır open(...)
-Kut kontrollü. Hedefler, tellerin kaybından ve iptal gecikmelerinden kaçınmak ve daha iyi gözlemlenebilirliği içerir. ExecutorService/Future, yeni kanal ilkel veya yeni bir iptal tamircisinin yerini almaz. Özellikle sanal iş parçacıkları olan hayranları G/Ç ile koordinasyon daha kolay, daha sağlam ve anlaşılabilir hale gelir.
// --enable-preview beim Kompilieren und Starten
record Response(String user, int order) {}
Response handle() throws InterruptedException {
try (var scope = StructuredTaskScope.<Object, Void>open()) {
var user = scope.fork(this::findUser); // liefert String
var order = scope.fork(this::fetchOrder); // liefert Integer
scope.join(); // wartet auf alle; wirft eine Exception bei einem Fehler und cancelt die anderen
return new Response((String) user.get(), (Integer) order.get());
}
}
// Platzhalter:
String findUser() { return "alice"; }
int fetchOrder() { return 42; }
30 yılına rağmen, Java birçok yeni program çekmeye devam ediyor. JAPS 511 (içe aktarma içi) ve 512 modül (kompakt orijin ve ana örnek yöntemlerine sahip kompakt dosyalar) ancak sadece yeni başlayanlara yardımcı olmakla kalmaz, aynı zamanda uzman geliştiricileri de basitleştirir. Her iki JEP de önceki birkaç önizlemeden sonra son duruma ulaşıyor.
JEP 511 – İthalat Bildirileri (JDK 25'teki Final)
Bu JEP dili tamamlıyor import module <name>
böylece bir beyanda bir formun dışa aktarılan tüm paketleri mevcuttur. Bu, içe aktarma kazan platformunu azaltır, modüler kitaplıkların (modüler olmak zorunda kalmadan) yeniden kullanılmasını kolaylaştırır ve bilinen ithalat bildirimlerinin yanında aksamasız çalışır. Yeni başlayanlar veya JShell prototip kullanıcıları için engel düşüyor çünkü artık hangi pakette olduğunu bilmeleri gerekmiyor. Geçiş modüllerinin bağımlılıkları olan senaryolarda (örneğin java.sql, java.xml), arılara ait bir kullanımı dikkat çekicidir.
import module java.base;
List<String> xs = List.of("a", "b");
Path p = Path.of("data.txt");
// List/Map/Stream/Path sind ohne einzelne Paket-Imports nutzbar
JEP 512-Kompakt Menşe ve Isisance-Main (JDK 25'teki Final)
Şimdi tek bir Java dosyasında küçük programları kaydedebilir ve gerçekleştirebiliriz. Amaç hassas bir giriş eğrisidir: ilk temel kavramlar, küçük yararsız törenlerde programlama. Karmaşıklık artıyorsa, kod sınıflarda/paketlerde/modüllerde mükemmel bir şekilde kaldırılabilir. İşlev önizlemeleri yönlendirir ve yeniden adlandırılır (basitten kompakt hale gelir). Yeni sınıf şimdi Java.lang'da ve dolaylı olarak ithal ediliyor, ancak statik yöntemleri değil. Ayrıca, şimdi dayanıyorum System.out
/System.in
yerine java.io.Console
.
// > java Main.java
void main() {
IO.println("Hello, World!");
}
JEP 513 – Esnek Üretici Organları (JDK 25'teki Final)
Üreticilerin artık aramadan önce talimatları olabilir super(...)
VEYA this(...)
içermek. Prolog'un bu aşaması, örneğin, konuları doğrulamak, alanlarınızı başlatmak, ortaya çıkan nesnenin geri kalanına atıfta bulunmadan veya giriş değerlerini dönüştürmek için hizmet vermektedir. Bunu olağan epilog takip eder. Bu birçok üreticiyi daha doğal hale getirir (ör. fail-fast
) ve subclasse alanları, süper sınıf üreticilerinin veya orada geri çağrılan yöntemlerin olası bir erişiminden önce zaten ayarlanmış olduğundan güvenliği artırır. Amaç, gereksiz kısıtlamaları ortadan kaldırmak ve nesnelerin tamamen başlatılan bir koşulu için daha fazla garanti sağlamaktır. Bu, önceki “Super () önce gelmeli” kuralının pratik sorunlarını önler, bu da gereksiz işlere, farklı iş parçacıklarında sinsi başlatma hatalarına ve dürüstlük ihlallerine yol açabilir.
JEP 507 – Desen, istek ve anahtarda ilkel türler (3. önizleme)
Bu JEP, ilkel de dahil olmak üzere tüm türler için desen yazışmalarını üniforma yapar. Tüm desen bağlamlarında (daha yüksek ve yuvalanmış seviye) ilkel modellere izin verir, ilkel isteği için uzanır (güvenli dönüşümler ve kayıplar dahil) ve tüm ilkel tiplerde (ayrıca boolean, uzun, yüzen, çift) geçişi gerçekleştirmenizi sağlar. Amaç daha az sürtünme ve daha fazla ifade edicidir: döküm ve boks ortadan kaldırılır, çünkü çılgın bir şema sadece dönüşüm kayıpsız olduğunda. Ayrıca, tip şampiyonlar instanceof
Ve “güvenli döküm” anlambilimini hizalayın.
// switch mit primitive type pattern
switch (x.getStatus()) {
case 0 -> "okay";
case 1 -> "warning";
case 2 -> "error";
case int i -> "unknown: " + i; // zeigt unbekannten int-Status
}
// instanceof mit sicherer Konversion (matcht nur verlustfrei)
if (i instanceof byte b) { /* b nutzen */ }
// Record-Pattern mit sicherem Narrowing
if (json instanceof JsonObject(var map)
&& map.get("age") instanceof JsonNumber(int age)) {
// nur wenn double → int verlustfrei passt
}
JEP 508 – Vektör API (yine inkübatör)
Vektör arılar, Java'da, doğal SIMD eğitmenlerinde (x64: SSE/AVX, Aarch64: Neon/SVE) derleyen vektör hesaplamalarını eksprese etmenizi sağlar ve tamamen skaler uygulamanın daha kararlı performansı ile. JDK 25'te, bu arı inkübatörün durumuna geri döndü, çünkü değer sınıflarının uygulanması hala vektör arılar için bir temel olarak bekliyor. Onlar yeni:
- Vectorshufle bellek segmentine erişim ↔
- Hotspot-C ++ yerine FFM-API kodu üzerinden yerel matematiksel kitaplıkların bağlantısı (düşük bakım)
- CPU X64'te Float16 (Add/sub/mul/sqrt/fma) operasyonlarının kendi kendine vektörleştirilmesi desteklenir.
Amaç, vektör komutları ve “zarif bozulma” üzerinde güvenilir bir örnek olan açık bir epi ve platform platformudur.
18 yeni Jep'den 8 idi. Geliştiriciler için daha az alakalı, ancak ikinci bir yazıda hala heyecan verici konulara bakıyoruz. Buna ek olarak, JAPS'ın okuma notlarında bulunmadığı birçok daha küçük yenilik. Kararlı değerler veya yapılandırılmış rekabet gibi JDK (Java Sınıf Kütüphanesi) değişiklikleri Java Almanac aracılığıyla da görüntülenebilir.
(MDO)
Bir yanıt yazın