Ana Sayfa/Teknoloji & Yazılım
Teknoloji & Yazılım·27 Ekim 2026·8 dk okuma

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

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) ve ShutdownOnFailure / ShutdownOnSuccess alt sınıfları tamamen kaldırılmıştır. Bunun yerine kapsamlar StructuredTaskScope.open() statik fabrika metotlarıyla açılmakta, tamamlama ve iptal politikaları ise Joiner<T, R> arayüzü üzerinden enjekte edilmektedir.
  • Yerleşik Joiner Politikaları:
    • 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ğrudan Stream<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 (jcmd JSON Thread Dump): jcmd <pid> Thread.dump_to_file -format=json komutu çalıştırıldığında, StructuredTaskScope içindeki ebeveyn ve çocuk sanal iş parçacıkları düz bir liste yerine tam ağaç hiyerarşisiyle dışa aktarılmaktadır.
mermaid
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:

  1. 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 (safetensors formatından kuantize edilmiş ONNX grafiğ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.
  2. 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.
  3. 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 ChatClient ve EmbeddingModel arayü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 PEMEncoder ve PEMDecoder sınıflarıyla işlenmesini standartlaştırır.
  • Spring Boot 4.1.2 ve 4.0.9 Sürümleri: 23–26 Ekim 2026 döneminde yayınlanan bu bakım sürümleri; Spring AI 2.1.0-RC1 / 2.0.2 uyumluluğ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:

java
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

  1. OpenJDK / Inside.java (Ekim 2026): JEP 543 Targeted to JDK 28: Structured Concurrency Finalization, StructuredTaskScope.open(), and Joiner API.
  2. Spring.io Official Blog — Spring Office Hours S5E27 (26 Ekim 2026): Hugging Face for Java Developers with Pratik Patel, Dan Vega, and DaShaun Carter.
  3. 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.
Konu Etiketleri
#Structured Concurrency#JEP 543#Spring Boot#Spring AI#Java 28#Hugging Face#ONNX Runtime
Emre Taştutan
Emre TaştutanGeliştirici & AI Meraklısı

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.

@tastutanlabs • Instagram Mini-Blog

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.

Instagram'da Takip Et →
Bu Yazıyı Paylaş:

Yorumlar (0)

Düşüncelerinizi Paylaşın

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Bu Kategorideki Diğer İncelemeler