JDK 28’de JEP 543 (Structured Concurrency) Nihai Sürümü, Java’da Hugging Face Açık Model Mimarisi (ONNX & TGI) ve JEP 540/542 Güncellemeleri

JDK 28’de JEP 543 (Structured Concurrency) Nihai Sürümü, Java’da Hugging Face Açık Model Mimarisi (ONNX & TGI) ve JEP 540/542 Güncellemeleri
Kurumsal Java ve OpenJDK ekosistemi, Mart 2027'de yayınlanacak JDK 28 sürümüne doğru ilerlerken hem eşzamanlılık (concurrency) modelinde hem de yerel yapay zeka çıkarım (inference) mimarisinde kritik eşikleri geride bırakıyor. JDK 19'dan bu yana kuluçka ve önizleme turlarından geçen Yapılandırılmış Eşzamanlılık (JEP 543: Structured Concurrency), JDK 28'de --enable-preview bayrağı gerektirmeyen kalıcı standart bir Java SE özelliği olarak hedeflendi. Eş zamanlı olarak Spring ekibinin yayınladığı Spring Office Hours S5E27 (Hugging Face for Java Developers) oturumu ve Spring Boot 4.1.2 / 4.0.9 güncellemeleri, Hugging Face üzerindeki açık ağırlıklı (open-weight) modellerin StructuredTaskScope paralelliğiyle JVM üzerinde nasıl düşük gecikmeli koşturulacağını ortaya koyuyor.
1. JDK 28 ve JEP 543: Structured Concurrency Artık Kalıcı Standart
Project Loom kapsamında sanal iş parçacıklarının (Virtual Threads — JEP 444) standartlaşması, milyonlarca eşzamanlı I/O görevinin çok düşük bellek maliyetiyle başlatılmasını sağlamıştı. Ancak klasik ExecutorService ve Future API'lerinde görevler arasındaki ebeveyn-çocuk (parent-child) hiyerarşisi çalışma zamanı tarafından zorunlu tutulmadığı için; bir alt görev hata verdiğinde diğer kardeş görevlerin arka planda çalışmaya devam etmesi (iş parçacığı sızıntısı / thread leak) veya iptal sinyallerinin gecikmesi gibi yapısal sorunlar yaşanıyordu.
İki kuluçka (JDK 19–20) ve yedi önizleme (JDK 21–27, en son JEP 505 ve JEP 533) turunun ardından JEP 543, yapılandırılmış eşzamanlılığı JDK 28'de nihai (final) API yapısına kavuşturmaktadır:
- Alt Sınıflamadan (Subclassing) Kompozisyona Geçiş (
StructuredTaskScope.open()): İlk önizleme sürümlerinde kullanılan genel kurucular (public constructors) veShutdownOnFailure/ShutdownOnSuccessalt sınıfları tamamen kaldırılmıştır. Bunun yerine kapsamlarStructuredTaskScope.open()statik fabrika metotlarıyla açılmakta, tamamlama ve iptal politikaları iseJoiner<T, R>arayüzü üzerinden enjekte edilmektedir. - Yerleşik
JoinerPolitikaları:Joiner.awaitAllSuccessfulOrThrow(): Varsayılan politika (StructuredTaskScope.open()). Tüm alt görevlerin başarılı olmasını bekler; herhangi biri başarısız olursa kalan kardeş görevleri anında iptal eder.Joiner.allSuccessfulOrThrow(): Tüm alt görevler başarılı olduğunda sonuçları doğrudanStream<Subtask<T>>/ liste olarak döndürür.Joiner.anySuccessfulOrThrow(): İlk başarılı sonucu döndürür ve devam eden diğer tüm alternatif alt görevleri iptal eder (hedged requests / yarışan mikroservis çağrıları için idealdir).
- Hiyerarşik Gözlemlenebilirlik (
jcmdJSON Thread Dump):jcmd <pid> Thread.dump_to_file -format=jsonkomutu çalıştırıldığında,StructuredTaskScopeiçindeki ebeveyn ve çocuk sanal iş parçacıkları düz bir liste yerine tam ağaç hiyerarşisiyle dışa aktarılmaktadır.
flowchart TD
A["Gelen İstek (Sanal İş Parçacığı)\nStructuredTaskScope.open(Joiner.allSuccessfulOrThrow())"] --> B["scope.fork(): Yerel ONNX Gömülüm (Embedding)"]
A --> C["scope.fork(): Vektör Veritabanı Benzerlik Sorgusu"]
A --> D["scope.fork(): Hugging Face TGI / vLLM Çıkarım Çağrısı"]
B --> E{"Joiner Politikası & Zaman Aşımı Denetimi\nscope.join()"}
C --> E
D --> E
E -->|"Tüm Alt Görevler Başarılı"| F["Deterministik Birleştirme (Join)\nSıfır Yetim İş Parçacığı"]
E -->|"Herhangi Biri Hata Verir / Timeout"| G["Kardeş Sanal İş Parçacıklarını Anında İptal Et\nFailedException / ExecutionException Fırlat"]
style A fill:#1e293b,stroke:#38bdf8,color:#ffffff
style E fill:#7c2d12,stroke:#f97316,color:#ffffff
style F fill:#064e3b,stroke:#10b981,color:#ffffff
style G fill:#7f1d1d,stroke:#ef4444,color:#ffffff
2. Java Geliştiricileri İçin Hugging Face Mimarisi (Spring Office Hours S5E27)
26 Ekim 2026 tarihli Spring Office Hours (S5E27) yayınına konuk olan Java Champion Pratik Patel (Dan Vega ve DaShaun Carter moderatörlüğünde), kurumsal yazılım dünyasındaki "Hugging Face yalnızca Python veri bilimcileri içindir" yanılgısını ortadan kaldıran üretim mimarilerini detaylandırdı. Hugging Face Hub üzerindeki 1 milyonu aşkın açık ağırlıklı model; veri mahremiyeti (KVKK/GDPR), deterministik gecikme süresi ve yüksek hacimli çıkarımlarda sıfır token başı bulut maliyeti avantajlarıyla doğrudan Java/Spring mikroservislerine entegre edilebilmektedir.
Kurumsal JVM uygulamalarında Hugging Face modelleri üç katmanlı bir topolojiyle çalıştırılmaktadır:
- JVM İçi (In-Process) ONNX Runtime ve DJL / JLama: Gömülüm (embedding), yeniden sıralama (reranking) ve metin sınıflandırma gibi 100M–1B parametreli modeller (
safetensorsformatından kuantize edilmişONNXgrafiğine dönüştürülerek), ONNX Runtime for Java veya Deep Java Library (DJL) üzerinden doğrudan JVM sürecinin kendi adres alanında (Foreign Function & Memory API / off-heap tensor bellek) koşturulur. Ağ sıçraması (network hop) sıfırlandığı için gecikme süresi milisaniyelerin altına iner. - Hugging Face Text Generation Inference (TGI) & vLLM Yan Konteynerleri: 7B–70B+ parametreli açık ağırlıklı LLM'ler (Llama, Qwen, Mistral, Kimi türevleri), GPU düğümlerinde çalışan Hugging Face TGI veya vLLM sunucuları üzerinden OpenAI uyumlu (
/v1/chat/completions) uç noktalar olarak yayınlanır. - Spring AI 2.x Soyutlama Katmanı: Uygulama kodu, alttaki modelin ücretli bir bulut API'si mi yoksa yerel bir Hugging Face TGI/ONNX modeli mi olduğunu bilmeden Spring AI
ChatClientveEmbeddingModelarayüzleriyle tip güvenli (type-safe) biçimde konuşur.
3. JDK 28’de Diğer Kritik Hedefler (JEP 540 & JEP 542) ve Spring Boot 4.1.2 / 4.0.9
JDK 28 geliştirme dalında JEP 543 ve JEP 544 (AOT Code Compilation) dışında, harici kütüphane bağımlılıklarını azaltan iki önemli JEP ve Spring Boot bakım sürümleri de dikkat çekmektedir:
- JEP 540: Simple JSON API (Kuluçka / Incubator): Jackson veya Gson gibi ağır veri bağlama (databind) kütüphanelerine ihtiyaç duymadan, JDK içinde hafif, değişmez (immutable) ve desen eşleme (Pattern Matching) destekli yerleşik bir JSON ayrıştırma/üretme API'si (
java.util.json) sunar. - JEP 542: PEM Encodings of Cryptographic Objects: Özel anahtarların (PKCS#8), açık anahtarların (X.509) ve sertifikaların BouncyCastle gibi üçüncü taraf sağlayıcılara veya manuel Base64 satır bölme işlemlerine gerek kalmadan doğrudan
PEMEncodervePEMDecodersınıflarıyla işlenmesini standartlaştırır. - Spring Boot
4.1.2ve4.0.9Sürümleri: 23–26 Ekim 2026 döneminde yayınlanan bu bakım sürümleri; Spring AI2.1.0-RC1/2.0.2uyumluluğunu, sanal iş parçacığı yürütücülerinde (Virtual Thread Executors) zarif kapanma (graceful shutdown) iyileştirmelerini ve AOT önbellek derleme kararlılığını içermektedir.
| Teknoloji / JEP / Sürüm | Hedef Platform | Temel Mühendislik Kazanımı | Üretim Durumu |
|---|---|---|---|
| JEP 543: Structured Concurrency | JDK 28 | StructuredTaskScope.open() ve Joiner ile sanal iş parçacığı sızıntılarını önleyen hiyerarşik eşzamanlılık |
Nihai (Final) Standart |
| Hugging Face + Spring AI (S5E27) | JVM / Spring Boot 4.x | ONNX Runtime (JVM içi) ve TGI/vLLM ile açık ağırlıklı modellerde düşük gecikmeli, yerel çıkarım | Üretimde Kullanıma Hazır |
| JEP 540: Simple JSON API | JDK 28 | Harici bağımlılık olmadan desen eşleme (Pattern Matching) uyumlu hafif JSON ağacı | Kuluçka (Incubator) |
| JEP 542: PEM Encodings | JDK 28 | X.509 sertifika ve PKCS#8 anahtarlar için yerleşik PEMEncoder / PEMDecoder desteği |
JDK 28 Hedefi |
| Spring Boot 4.1.2 & 4.0.9 | Java 21–28 | AOT derleme iyileştirmeleri, güvenlik yamaları ve Spring AI 2.x entegrasyon güncellemeleri | GA (Kararlı Sürüm) |
4. Örnek Mimari: JDK 28 StructuredTaskScope (JEP 543) ile Paralel Hugging Face RAG Hattı
Aşağıdaki Java 28 kodu, nihai StructuredTaskScope.open() ve Joiner API'sini kullanarak; bir yandan yerel ONNX Runtime gömülüm (embedding) vektör aramasını, diğer yandan Hugging Face TGI güvenlik sınıflandırıcısını paralel sanal iş parçacıklarında koşturan ve herhangi bir alt görev hata verdiğinde diğerini deterministik olarak iptal eden bir Spring AI servisini göstermektedir:
package com.tastutanlabs.jvm.ai;
import java.time.Duration;
import java.util.List;
import java.util.concurrent.StructuredTaskScope;
import java.util.concurrent.StructuredTaskScope.Joiner;
import java.util.concurrent.StructuredTaskScope.Subtask;
public class StructuredHuggingFacePipeline {
public record SecurityVerdict(boolean safe, String policyTag) {}
public record RetrievedContext(List<String> chunks, long latencyMs) {}
public record EnrichedPromptContext(SecurityVerdict verdict, RetrievedContext context) {}
/**
* JDK 28 JEP 543 (Final) StructuredTaskScope.open() kullanarak
* yerel Hugging Face ONNX güvenlik denetimi ve vektör aramasını paralel çalıştırır.
*/
public EnrichedPromptContext prepareRagContext(String userQuery) throws InterruptedException {
try (var scope = StructuredTaskScope.open(
Joiner.awaitAllSuccessfulOrThrow(),
cfg -> cfg.withName("hf-rag-scope").withTimeout(Duration.ofMillis(450))
)) {
// 1. Alt Görev: JVM içi ONNX Runtime ile yerel Llama-Guard / DeBERTa sınıflandırması
Subtask<SecurityVerdict> guardrailTask = scope.fork(
() -> evaluateLocalOnnxGuardrail(userQuery)
);
// 2. Alt Görev: Yerel BGE-M3 ONNX embedding + vektör benzerlik sorgusu
Subtask<RetrievedContext> retrievalTask = scope.fork(
() -> queryVectorStoreWithLocalEmbedding(userQuery)
);
// Her iki görev tamamlanana kadar bekler; biri çökerse kardeş görev anında iptal edilir
scope.join();
return new EnrichedPromptContext(guardrailTask.get(), retrievalTask.get());
}
}
private SecurityVerdict evaluateLocalOnnxGuardrail(String query) {
return new SecurityVerdict(true, "ONNX_LOCAL_SAFE");
}
private RetrievedContext queryVectorStoreWithLocalEmbedding(String query) {
return new RetrievedContext(
List.of("JEP 543 finalizes Structured Concurrency in JDK 28."),
12L
);
}
public static void main(String[] args) throws InterruptedException {
var pipeline = new StructuredHuggingFacePipeline();
EnrichedPromptContext result = pipeline.prepareRagContext("JEP 543 Joiner API nedir?");
System.out.println("Durum: " + result.verdict().policyTag()
+ " | Bağlam Gecikmesi: " + result.context().latencyMs() + "ms");
}
}
5. Sonuç: Yalın Çekirdek JDK ve Kurumsal JVM Üzerinde Yerel Yapay Zeka
JDK 28 yol haritasında JEP 543 (Structured Concurrency) özelliğinin nihai standart haline gelmesi, JEP 540 (Simple JSON) ve JEP 542 (PEM Encodings) ile birleştiğinde çekirdek Java platformunu modern bulut mikroservisleri için her zamankinden daha yalın ve güvenli kılmaktadır. Öte yandan Spring AI ve Hugging Face (ONNX Runtime / TGI) entegrasyonu, Java ekosisteminin yalnızca harici REST API'lerini çağıran bir istemci olmadığını; yüksek eşzamanlılığa sahip yerel açık ağırlıklı yapay zeka iş yükleri için birinci sınıf bir çalışma zamanı olduğunu kanıtlamaktadır.
Kaynaklar
- OpenJDK / Inside.java (Ekim 2026): JEP 543 Targeted to JDK 28: Structured Concurrency Finalization,
StructuredTaskScope.open(), andJoinerAPI. - Spring.io Official Blog — Spring Office Hours S5E27 (26 Ekim 2026): Hugging Face for Java Developers with Pratik Patel, Dan Vega, and DaShaun Carter.
- OpenJDK JEP Index & Spring Boot Releases (Ekim 2026): JEP 540 (Simple JSON API), JEP 542 (PEM Encodings of Cryptographic Objects), and Spring Boot 4.1.2 / 4.0.9 Release Notes.
Yazılım mimarisi, mikroservis ekosistemleri ve üretken yapay zeka uygulamaları üzerine çalışıyorum. TastutanLabs çatısı altında geliştirici araçları ve SaaS ürünleri inşa ediyorum.
Bu analizin 6 kartlık görsel özetini Instagram'da inceleyin ve kaydedin
Her gün yazılım mimarisi, Java/JVM ve yapay zeka gelişmelerini kendi başına okunabilen 6 slaytlık Mini-Blog serileri halinde paylaşıyoruz.
Yorumlar (0)
Düşüncelerinizi Paylaşın
Henüz yorum yapılmamış. İlk yorumu siz yapın!