Ana Sayfa/Java & Kurumsal Mimari
Java & Kurumsal Mimari·17 Ekim 2026·14 dk okuma

2 MB Başlangıç Yığınından Yapısal Eşzamanlılığa: JDK 28’de ZGC JEP 545, Project Loom’un Alt Seviye API’si, Veri Odaklı JSON ve Spring Ekosisteminde AI-Destekli Performans Rönesansı

JDK 28 ile ZGC’nin 2 MB başlangıç yığını (JEP 545) üzerinden açılış-ısınma ikilemini bitirmesi, Project Loom’un StructuredTaskScope ve alt seviye eşzamanlılık mimarisi, JEP 540 ile gelen katı RFC 8259 JSON işleyici ve Spring ekosisteminde JVM ile Rust arasındaki performans savaşının derinlemesine teknik analizi.

2 MB Başlangıç Yığınından Yapısal Eşzamanlılığa: JDK 28’de ZGC JEP 545, Project Loom’un Alt Seviye API’si, Veri Odaklı JSON ve Spring Ekosisteminde AI-Destekli Performans Rönesansı

Kurumsal yazılım mimarisinde Java Sanal Makinesi (JVM) üzerine kurulu sistemlerin tasarımında on yıllardır süregelen temel bir mühendislik uzlaşısı (trade-off) bulunur: Bir uygulamanın milisaniyeler içinde ayağa kalkmasını (fast startup) istiyorsanız başlangıç yığın belleğini (-Xms) küçük tutarsınız; ancak uygulamanın ilk trafik dalgasında işletim sisteminden sürekli bellek sayfası talep ederken teklemesini önlemek ve hızla maksimum verime ulaşmasını (fast warmup) istiyorsanız -Xms değerini -Xmx (maksimum yığın) değerine eşitlersiniz. İkinci yaklaşım, bulut-yerel (cloud-native) konteyner mimarilerinde fiziksel RAM'in daha uygulama açılır açılmaz bloke edilmesine ve başlatma süresinin uzamasına yol açar.

OpenJDK ve Spring ekosisteminde yayımlanan son teknik raporlar, derleyici ve çalışma zamanı (runtime) mühendisliğinin bu tür tarihsel uzlaşıları kökünden reddettiği yeni bir döneme girildiğini belgeliyor. Z Garbage Collector (ZGC) üzerinde gerçekleştirilen çekirdek seviyesindeki bellek devriminden Project Loom’un eşzamanlılık soyutlamalarını yeniden tanımlayan StructuredTaskScope mimarisine; JDK 28’in katı RFC 8259 standartlı yerleşik JSON API’sinden Spring ekosistemindeki AI-destekli performans kıyaslamalarına kadar uzanan gelişmeler, tek bir izole yenilik değil, birbiriyle kenetlenen bütünsel bir çalışma zamanı evrimidir.


1. JEP 545: ZGC ile Hızlı Açılış ve Isınma Mimarisi (JDK 28)

OpenJDK HotSpot GC ekibinden Erik Österlund liderliğinde geliştirilen ve JDK 28 için resmen hedeflenen (Targeted) JEP 545: Faster Startup and Warmup with ZGC, ZGC’nin fiziksel belleği edinme ve hazırlama mekanizmasını baştan aşağı yeniden tasarlıyor. Bu JEP, kardeşi olan JEP 546 (Adaptive Heap Sizing for ZGC) ile birlikte değerlendirildiğinde, JVM dünyasında manuel yığın boyutu yapılandırmasını tarihe gömmeyi amaçlayan iki ayaklı bir stratejinin ilk halkasını oluşturuyor.

Geleneksel ZGC yapılandırmalarında geliştiriciler iki zorlu kararla yüzleşir:

  1. Maksimum Yığın Boyutu (-Xmx): Çok küçük ayarlandığında ZGC sürekli çöp toplama (GC) döngülerine girerek CPU yakar; çok büyük ayarlandığında ise aynı ana makinedeki (host) diğer konteynerlerin kullanabileceği fiziksel RAM israf edilir.
  2. Başlangıç Yığın Boyutu (-Xms): Küçük bir -Xms hızlı başlatma sağlar ancak uygulama ısınırken (warmup) yığın genişletme maliyetleri nedeniyle gecikme (latency) sıçramaları yaşanır. Büyük bir -Xms (veya -XX:+AlwaysPreTouch) ise ısınmayı hızlandırır fakat açılış süresini dramatik biçimde yavaşlatır.

JEP 545, açılış ve ısınma arasındaki bu zıtlığı dört temel mekanizma ile ortadan kaldırıyor:

  • Mikroskobik 2 MB Başlangıç Yığını: ZGC artık varsayılan olarak yalnızca 2 MB büyüklüğünde minimal bir başlangıç yığınıyla ayağa kalkıyor. Bu sayede işletim sistemi seviyesinde bellek tahsisi neredeyse sıfır maliyetle gerçekleşerek anında açılış (instant startup) sağlanıyor.
  • Agresif ve Eşzamanlı Yığın Genişletme: Uygulama nesne tahsis etmeye (allocation) başladığında, ZGC uygulama iş parçacıklarını (mutator threads) duraklatmadan arka planda agresif ve eşzamanlı bir şekilde yığını genişletiyor.
  • Genişleme Sırasında Sayfa Ön-Dokunuşu (Pre-Touching During Expansion): Sayfaların fiziksel RAM'e eşlenmesi (page fault) işlemi ne uygulama açılışında (startup) topluca yapılıyor ne de uygulama iş parçacıklarının nesne yazma anına bırakılıyor. Bunun yerine ZGC çalışanları (worker threads), eşzamanlı genişleme fazında belleğe önceden dokunarak (pre-touch) hazır fiziksel sayfaları mutator iş parçacıklarına sunuyor.
  • Linux 6.1 Sayfa Yükseltme API'si ile Büyük Sayfalar (Large Pages): Fiziksel belleğin küçük parçalar halinde edinilmesi normalde TLB (Translation Lookaside Buffer) ıskalamalarını artırır. JEP 545, Linux 6.1 çekirdeğiyle gelen page-upgrade API’sini kullanarak küçük sayfaları çalışma zamanında şeffaf biçimde büyük sayfalara (Large Pages / HugePages) yükseltiyor.
java
// JDK 28 Öncesi: Geleneksel ZGC Konteyner Başlatma Parametreleri
// Açılışta 16GB belleği sıfırlamak (AlwaysPreTouch) saniyelerce sürer:
// java -XX:+UseZGC -Xms16g -Xmx16g -XX:+AlwaysPreTouch -jar app.jar

// JDK 28 (JEP 545 & JEP 546 Vizyonu): Sıfır Manuel Yığın Ayarı
// 2MB ile milisaniyeler içinde açılır, Linux 6.1 page-upgrade ile 
// mutator thread'leri bloklamadan large page'lere genişler:
// java -XX:+UseZGC -jar app.jar

Ekim 2026 itibarıyla OpenJDK 28 erken erişim (early-access build 19) sürümlerinde yapılan bayrak sondajları (flag probing), -XX:+ZAdaptiveHeapSizing gibi ilgili yapılandırmaların henüz ana dala (mainline) entegre edilmediğini ve varsayılan ergonomik InitialHeapSize değerinin mevcut EA derlemelerinde 8388608 bayt (8 MB) olarak göründüğünü ortaya koyuyor. Ancak JEP 545'in Targeted statüsüne geçmesiyle birlikte, önümüzdeki derlemelerde 2 MB başlangıç yığını ve otonom sayfa hazırlama mimarisinin doğrudan standart ZGC davranışı olarak yerini alması kesinleşmiş durumda.

"Mimari Not: JEP 545, JVM'in bulut-yerel ortamlarda 'ağır ve hantal bir canavar' olduğu yönündeki algıyı çekirdek seviyesinde yıkan en kritik adımdır. Başlangıçta -XX:+AlwaysPreTouch kullanarak konteyner ayağa kalkma sürelerini (liveness/readiness probe) riske atmak yerine, sayfa ön-dokunuşunu ZGC'nin eşzamanlı genişleme iş parçacıklarına devretmek, Serverless ve Kubernetes HPA (Horizontal Pod Autoscaler) senaryolarında Java'nın oyun kurucu olmasını sağlar."


2. Project Loom’da Yeni Perde: Yapısal Eşzamanlılık (JEP 543) ve Alt Seviye API

JDK 21 ile hayatımıza giren Sanal İş Parçacıkları (Virtual Threads), yüksek verimli (high-throughput) eşzamanlı uygulamalar yazma, bakımını yapma ve gözlemleme maliyetini dramatik biçimde düşürdü. Ancak milyonlarca ucuz iş parçacığı oluşturabilmek, beraberinde yeni bir mimari sorunu getirdi: Birbirleriyle ilişkili alt görevlerin (subtasks) yaşam döngüsünü, hata yayılımını (error propagation) ve iptal (cancellation) mekanizmalarını yönetmek.

Inside.java üzerinden yayımlanan ve Oracle Java Platform Grubu mimarları Alan Bateman ile Viktor Klang (ve Victor Rudometov) tarafından Devoxx Belgium 2026 sahnesinde detaylandırılan "Structured Concurrency Looms" oturumu, JEP 543: Structured Concurrency özelliğinin 2 kuluçka (JDK 19–20) ve 7 önizleme (JDK 21–27) turunun ardından JDK 28'de kalıcı (permanent/final) hale gelmeye hazırlandığını ortaya koyuyor.

ExecutorService ve Future tabanlı geleneksel eşzamanlılık modelinde, bir ana görev iki alt görevi çatalladığında (fork), alt görevlerden biri hata fırlatsa bile diğeri arka planda çalışmaya devam ederek "iş parçacığı sızıntısına" (thread leak) ve kaynak israfına yol açar. StructuredTaskScope ise bir görevi ve onun çatalladığı tüm alt görevleri tek bir iş birimi (single unit of work) olarak ele alır; kapsam (scope) kapandığında tüm alt iş parçacıklarının sonlandırıldığı derleyici ve çalışma zamanı tarafından garanti altına alınır.

Devoxx Belgium 2026 sunumunda vurgulanan güncel mimari tasarımın öne çıkan bileşenleri şunlardır:

  • Takılabilir Birleştiriciler (Pluggable Joiners): Önceki önizleme sürümlerinde alt sınıf türetmeye (ShutdownOnFailure, ShutdownOnSuccess) dayanan yapı, yerini çok daha esnek ve fonksiyonel olan Joiner arayüzüne bıraktı. Geliştiriciler artık AllSuccessfulOrThrow, AnySuccessfulOrThrow ve özel koşul sağlandığında iptal tetikleyen AllUntil gibi yerleşik birleştiricileri kullanabiliyor.
  • Yaşam Döngüsüne Bağlı Zaman Aşımları: Zaman aşımı (timeout) tanımlamaları doğrudan open ve join yaşam döngüsüne bağlanarak, süre dolduğunda tüm alt görevlerin iş parçacığı kesmesi (thread interruption) yoluyla temiz bir şekilde iptal edilmesi sağlanıyor.
  • Scoped Values ve JSON Thread Dumps: İlişkili alt görevlere bağlam (context) aktarımı ThreadLocal yerine değiştirilemez (immutable) ve hafif ScopedValue nesneleriyle yapılırken; hata ayıklama sırasında alınan JSON formatındaki iş parçacığı dökümleri (thread dumps), ebeveyn-çocuk görev hiyerarşisini ağaç yapısında koruyarak hangi alt görevin hangi kapsam tarafından başlatıldığını net bir şekilde gösteriyor.
  • Gelecekteki Alt Seviye (Lower-Level) API Vizyonu: Bateman ve Klang, StructuredTaskScope API'sinin küçük yüzey alanının altında çalışan yeni bir alt seviye (lower-level) mekanizmayı da ilk kez gözler önüne serdi. Bu alt katman, ilerleyen JDK sürümlerinde özel eşzamanlılık çerçeveleri (custom concurrency frameworks) geliştiren kütüphane yazarları için doğrudan erişilebilir bir temel API oluşturacak.
java
import java.util.concurrent.StructuredTaskScope;
import java.util.concurrent.StructuredTaskScope.Joiner;
import java.util.concurrent.StructuredTaskScope.Subtask;
import java.time.Duration;

public record OrderContext(String traceId, String tenantId) {}

public class OrderOrchestrator {
    private static final ScopedValue<OrderContext> CONTEXT = ScopedValue.newInstance();

    public OrderSummary processOrder(String orderId) throws Exception {
        var ctx = new OrderContext("TRC-9941", "TNT-PROD");
        
        return ScopedValue.where(CONTEXT, ctx).call(() -> {
            // JDK 28 kalıcı aday tasarımı: Pluggable Joiner ve yapılandırılmış yaşam döngüsü
            try (var scope = StructuredTaskScope.open(
                    Joiner.allSuccessfulOrThrow(),
                    cfg -> cfg.withTimeout(Duration.ofMillis(800))
                              .withName("order-orchestration-scope"))) {

                Subtask<InventoryStatus> inventory = scope.fork(() -> checkInventory(orderId));
                Subtask<PaymentReceipt> payment = scope.fork(() -> chargeCustomer(orderId));
                Subtask<FraudScore> fraud = scope.fork(() -> evaluateFraudRisk(orderId));

                // Herhangi biri başarısız olursa diğerleri anında iptal edilir (short-circuit)
                // ve close() bloğundan çıkılmadan tüm sanal iş parçacıklarının temizliği garanti edilir.
                scope.join();

                return new OrderSummary(
                    inventory.get(),
                    payment.get(),
                    fraud.get()
                );
            }
        });
    }
    
    // Alt servis çağrı simülasyonları...
    private InventoryStatus checkInventory(String id) { return new InventoryStatus(true); }
    private PaymentReceipt chargeCustomer(String id) { return new PaymentReceipt("TX-101"); }
    private FraudScore evaluateFraudRisk(String id) { return new FraudScore(0.02); }
    
    public record InventoryStatus(boolean available) {}
    public record PaymentReceipt(String txId) {}
    public record FraudScore(double risk) {}
    public record OrderSummary(InventoryStatus inv, PaymentReceipt pay, FraudScore fraud) {}
}

3. JEP 540: Java’da Günlük JSON İşlemleri ve Veri Odaklı Programlama (DOP)

Modern yazılım geliştirmede JSON her yerdedir; ancak küçük bir yapılandırma dosyasını okumak, basit bir HTTP yükünü (payload) oluşturmak veya hızlı bir prototip geliştirmek için projeye Jackson gibi devasa bir bağımlılık eklemek, "tek bir sandalyeyi taşımak için nakliye şirketi kiralamaya" benzer. Alan Bateman ve Viktor Klang’ın sunduğu (ve Naoto Sato, Paul Sandoz, Justin Lu, Stuart Marks tarafından geliştirilen) JEP 540: Simple JSON API (Incubator), JDK 28’de bu boşluğu doldurmak üzere kuluçka aşamasında devreye giriyor.

"Everyday JSON in Java" oturumunda altı çizilen en önemli mimari gerçek şudur: Bu API, Jackson veya Gson’ın yerini almak için tasarlanmamıştır. Aksine, harici bir kütüphanenin gereksiz veya pratik olmadığı durumlar için düşük sürtünmeli (low-friction) bir alternatif sunar. Dahası, JDK'nın kendisi zaten JSON üretmektedir (örneğin Project Loom’un yapısal iş parçacığı dökümleri ve JDK Flight Recorder - JFR kayıtları). JDK'nın kendi ürettiği teşhis verilerini yine harici bir bağımlılık olmadan tüketebilmesi, bu API'nin platforma dahil edilmesindeki en güçlü içsel argümandır.

JEP 540’ın tasarımını şekillendiren üç kritik mühendislik tercihi bulunuyor:

  1. Veri Odaklı Programlama (Data-Oriented Programming - DOP): API, karmaşık nesne yönelimli sarmalayıcılar yerine mühürlü (sealed) bir JSON değer hiyerarşisi (String, Number, Boolean, Null, Object, Array) üzerine inşa edilmiştir. Java'nın modern Pattern Matching ve switch ifadeleriyle doğrudan bütünleşir. Belgeleri ayrıştırmak ve gezmek için parse, toDisplayString, get, tryGet ve tryValue gibi yalın metotlar sunulur.
  2. Tavizsiz RFC 8259 Katılığı (Strictness): Ayrıştırıcı, Postel Yasası'ndaki ("gönderdiğinde muhafazakar, kabul ettiğinde esnek ol") gevşekliği tamamen reddeder ve yalnızca RFC 8259 standardını uygular. JSON içinde yorum satırlarına (comments), sonda unutulan fazladan virgüllere (trailing commas) veya aynı nesne içindeki mükerrer anahtar isimlerine (duplicate member names) kesinlikle izin verilmez. Farklı ayrıştırıcıların aynı bozuk JSON yükünü farklı yorumlamasından kaynaklanan güvenlik açıkları ve üretim hataları bu katılıkla engellenir.
  3. Bilinçli Olarak Bırakılan Boşluklar: İlk kuluçka sürümünde doğrudan Record-to-JSON nesne eşlemesi (data binding) ve çekirdek yüzeyde yerleşik BigDecimal/BigInteger dönüşümleri yer almıyor. Gelecekte HttpClient.BodyHandlers ile doğrudan entegrasyon sağlanması ve kuluçka geri bildirimlerine göre şekillendirilmesi planlanıyor.
java
// JDK 28 JEP 540 (Incubator) - Veri Odaklı JSON Ayrıştırma ve Pattern Matching
import jdk.incubator.json.Json;
import jdk.incubator.json.JsonValue;
import jdk.incubator.json.JsonObject;
import jdk.incubator.json.JsonArray;
import jdk.incubator.json.JsonNumber;
import jdk.incubator.json.JsonString;

public class ThreadDumpAnalyzer {

    public void inspectJvmDiagnosticJson(String rawJsonPayload) {
        // RFC 8259 katılığı: Yorum satırı, trailing comma veya duplicate key varsa anında reddedilir
        JsonValue root = Json.parse(rawJsonPayload);

        // Sealed hiyerarşi üzerinde Pattern Matching ile güvenli gezinme
        switch (root) {
            case JsonObject obj when obj.tryGet("threadDump").isPresent() -> {
                JsonValue dumpNode = obj.get("threadDump");
                if (dumpNode instanceof JsonObject dumpObj) {
                    String processId = dumpObj.tryValue("processId", JsonString.class)
                                              .map(JsonString::value)
                                              .orElse("UNKNOWN");
                    System.out.println("İncelenen JVM PID: " + processId);
                }
            }
            case JsonArray arr -> System.out.println("Toplu metrik dizisi, eleman sayısı: " + arr.values().size());
            default -> throw new IllegalArgumentException("Beklenmeyen JSON şeması: " + root.toDisplayString());
        }
    }
}

"Mimari Not: JEP 540'ta doğrudan Record eşlemesinin (binding) bulunmaması bir eksiklik değil, yansıma (reflection) bataklığına girmemek için alınmış bilinçli bir mimari karardır. JDK çekirdeği, şema doğrulamasını ve yapısal ayrıştırmayı derleme zamanı tip güvenliği sağlayan Sealed Interface + Pattern Matching ikilisine devrederek çalışma zamanı yükünü sıfıra indiriyor."


4. Paul Sandoz’un AI Yol Haritası ve Spring Ekosisteminde Performans Rönesansı

OpenJDK tarafındaki bu alt seviye çalışma zamanı iyileştirmeleri, üst katmanda yapay zeka iş yükleri ve kurumsal uygulama çerçeveleriyle doğrudan birleşiyor. Bu haftanın bülteninde yer alan diğer beş önemli gelişme, Java'nın AI ve yüksek performans dünyasındaki konumunu tamamlıyor:

A. Paul Sandoz: Java AI Dünyasına Nasıl Uyum Sağlıyor?

Oracle Java Platform Grubu Mimarı Paul Sandoz tarafından yayımlanan "How Does Java Fit Into the World of AI—and How Can It Become an Even Better Fit?" başlıklı analiz, Java'nın yapay zeka çağında neden Python sarmalayıcılarına mahkum olmadığını dört büyük OpenJDK projesi üzerinden açıklıyor:

  • Project Babylon (Code Reflection): Java kodunun sembolik olarak modellenip GPU çekirdeklerine (CUDA/SPIR-V) veya ONNX çalışma zamanlarına derlenmesini sağlayarak saf Java ile model çıkarımı (inference) yapılmasına olanak tanıyor.
  • Project Valhalla (Value Types): Nesne başlığı (object header) ve işaretçi dolaylamasını (pointer indirection) ortadan kaldırarak çok boyutlu tensör ve vektör dizilerinin bellekte düz (flat) ve yoğun biçimde tutulmasını sağlıyor.
  • Project Panama (FFM & Vector API): Yerel C/C++ AI kütüphaneleriyle sıfır kopyalama (zero-copy) prensibiyle konuşurken (JDK 28'de Arena.ofConfined() çok daha ucuz hale getirildi), CPU SIMD komut setlerini doğrudan Java'ya açıyor.
  • Project Amber: Veri odaklı programlama yetenekleriyle AI ajanlarının girdi/çıktı şemalarını tip güvenli hale getiriyor.

B. Andrew Lombardi ile Rakamlarla "Java Rust'tan Daha Performanslı Olabilir mi?"

Spring.io blogunda Josh Long'un sunduğu A Bootiful Podcast’in en ses getiren yeni bölümünde, topluluk efsanesi Andrew Lombardi konuk oldu. Sektördeki "her şeyi Rust ile yeniden yaz" (rewrite everything in Rust) furyasını mercek altına alan Lombardi, gerçek dünyadaki bir uygulamayı yapay zeka (AI) desteğiyle bir hafta sonunda Kotlin/JVM'e port ederek çok konuşulan bir Rust yeniden yazımıyla (benchmark) kafa kafaya çarpıştırdığı deneyin verilerini paylaştı.
Analizde öne çıkan bulgular şunlar:

  • Mikro-benchmark tuzakları ve önbellekleme (caching) sürprizleri düzeltildiğinde, modern JVM'in JIT (Just-In-Time) derleyicisi ve çöp toplayıcıları, uzun süreli çalışan kurumsal iş yüklerinde Rust ile başa baş ve belirli senaryolarda daha yüksek verim (throughput) sergiliyor.
  • Yapay zeka destekli kod dönüştürme süreçlerinde kullanılan token maliyetleri, çerçeve denkliği (framework parity), bellek ödünleşimleri ve Kotlin/Java tip sisteminin okunabilirliği hesaba katıldığında, büyük ölçekli sistemlerde JVM'den Rust'a geçişin mühendislik yatırım getirisi (ROI) miti çökmüş oluyor.

C. Kohsuke Kawaguchi’nin Mirası ve This Week in Spring (6 & 13 Ekim 2026) Raporları

Josh Long'un hem 6 Ekim (Devoxx Belgium - Antwerp özel yayını) hem de 13 Ekim (Carmel-by-the-Sea) tarihli "This Week in Spring" bültenleri ile efsanevi mühendis Kohsuke Kawaguchi podcast bölümü, ekosistemin araç zinciri (tooling) ve AI entegrasyonundaki evrimini gözler önüne seriyor:

  • Spring AI ve "TypeSafe Jev" ile Modüler RAG: Spring AI lideri Christian Tzolov’un yayımladığı "Spring AI Modular RAG and TypeSafe Jev: Retrieve More, Keep Only What Answers" mimarisi, çok adımlı ajan iş akışlarında hızlı, ucuz ve yapılandırılmış kararlar almak için TypeSafe Jev modelini devreye sokuyor. Tip güvenli sorular (typed questions) alıp kalibre edilmiş sayısal/yapısal yanıtlar üreten bu katman, RAG boru hatlarında daha fazla bağlam çekip (retrieve more) yalnızca soruyu gerçekten yanıtlayan parçaları (keep only what answers) LLM'e göndererek halüsinasyonları ve token maliyetlerini minimize ediyor. Ayrıca kod tabanının "bilgi grafiğini" (knowledge graph) görünür kılan açık kaynaklı OneLens projesi de bu mimariyi tamamlıyor.
  • JobRunr 9 ve Spring Boot 4.x Ekosistemi: Dağıtık arka plan işleme motoru JobRunr 9'un yeni sürümü; hangi adımın başarısız olduğunu anında görme, yavaşlamaya neden olan işi tespit etme, veri kaybetmeden çalışan bir işi durdurma ve işleri milisaniyeler içinde başlatma yetenekleriyle Spring Boot 4.1 ekosistemine entegre oldu.
  • Kohsuke Kawaguchi ve Altyapı Mühendisliği: Sun Microsystems döneminde JDK içindeki XML ve web servisleri altyapısını inşa eden, Com4J, XML şema doğrulayıcıları, daemonization araçları ve tabii ki Jenkins’in yaratıcısı olan Kohsuke Kawaguchi ile yapılan söyleşi; Java'nın masaüstünde, Windows ortamlarında ve karmaşık kurumsal entegrasyon dünyasında nasıl pratik hale getirildiğinin tarihsel anatomisini sunuyor. Bugün JReleaser (Andres Almiray) ve modern CI/CD ajanlarıyla devam eden sürtünmesiz dağıtım kültürünün temelleri bu mimari mirasa dayanıyor.

5. Mimari Sentez ve Mühendislik Çıkarımları

Bu sabahki bültenin ortaya koyduğu sekiz farklı haber başlığı tek bir mimari tabloda birleştirildiğinde, Java ve Spring ekosisteminin 2026 sonbaharında ulaştığı nokta son derece nettir:

Katman Teknoloji / JEP Çözülen Mimari Sorun Kurumsal Etkisi
Bellek ve GC JEP 545 & JEP 546 (ZGC) Hızlı açılış (-Xms küçük) vs. Hızlı ısınma (-Xms büyük) ikilemi 2 MB başlangıç yığını ve Linux 6.1 large-page yükseltmesiyle sıfır ayarlı otonom konteyner belleği
Eşzamanlılık JEP 543 (Project Loom) Sanal iş parçacığı sızıntıları ve karmaşık iptal/hata yönetimi StructuredTaskScope, takılabilir Joiner stratejileri ve ebeveyn-çocuk ilişkili JSON thread dump
Çekirdek API JEP 540 (Simple JSON) Küçük JSON işleri ve JFR/Thread Dump analizi için ağır kütüphane zorunluluğu Mühürlü (sealed) DOP hiyerarşisi ve sıfır toleranslı katı RFC 8259 ayrıştırıcısı
AI & Çerçeve Babylon & Spring AI Jev Ham RAG gürültüsü, yüksek token maliyeti ve GPU/SIMD erişim darboğazı TypeSafe Jev ile filtrelenmiş modüler RAG, JobRunr 9 ve Rust ile yarışan JVM çalışma zamanı

Yazılım Mimarları ve Geliştiriciler İçin Eylem Planı

  1. GC Parametrelerini Sadeleştirin: JDK 28 ile birlikte ZGC kullanırken alışkanlıkla eklenen -Xms ve -XX:+AlwaysPreTouch bayraklarını gözden geçirin. JEP 545 ve JEP 546'nın otonom yığın genişletme mekanizmaları, manuel müdahalelerden çok daha verimli bir sayfa yönetimi sunacaktır.
  2. Dağınık ExecutorService Kodlarını StructuredTaskScope ile Değiştirin: Mikroservis orkestrasyonlarında ve paralel AI ajan çağrılarında CompletableFuture.allOf(...) zincirleri yerine, JDK 28'de kalıcılaşacak olan StructuredTaskScope ve Joiner yapısına geçiş planlaması yapın.
  3. Modüler RAG Boru Hatlarında "Retrieve More, Keep Only What Answers" İlkesini Uygulayın: Büyük dil modellerine ham vektör araması sonuçlarını doğrudan beslemek yerine, Spring AI'ın TypeSafe Jev yaklaşımında olduğu gibi ucuz ve yapılandırılmış bir karar katmanıyla bağlamı daraltarak hem gecikmeyi hem de maliyeti düşürün.
Konu Etiketleri
#Java#OpenJDK#Project Loom#Structured Concurrency#JDK 28#JVM#Spring AI#ZGC
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

Java & Kurumsal Mimari

"Her Şeyi Rust İle Yeniden Yaz" Mitine JVM Tokadı: Kotlin/Java vs. Rust Kıyaslaması, Paul Sandoz’dan 4 Katmanlı AI Mimarisi, JEP 540 RFC 8259 JSON ve Jenkins’ten AI-Destekli CI’a Evrim

Spring ve OpenJDK ekosisteminde haftanın en kritik kırılmaları: Andrew Lombardi'nin AI destekli Rust vs. JVM/Kotlin performans deneyi, Paul Sandoz'un Project Babylon ve Detroit eksenindeki 4 katmanlı AI vizyonu, Alan Bateman ve Viktor Klang'dan JEP 540 yerleşik JSON ile Structured Concurrency'nin alt seviye geleceği ve Jenkins'in babası Kohsuke Kawaguchi'nin mühendislik mirası.

Emre TaştutanEmre Taştutan
12 dk
Java & Kurumsal Mimari

"Runtime Yılı" Manifestosu: JDK 28'de Project Valhalla (JEP 401 & 539), Project Leyden (JEP 544) ve JVM'in Fizik Kurallarını Değiştiren Mimari Evrim

Ron Pressler'ın "Java - The Year of the Runtime" vizyonu doğrultusunda JDK 27 ve JDK 28 ile ana hatta (mainline) giren JEP 401 (Value Objects), JEP 539 (Strict Field Initialization) ve JEP 544 (AOT Code Compilation) gelişmelerinin bellek yerleşimi, CPU önbellek (L1/L2) verimliliği ve kurumsal mikroservis mimarileri üzerindeki etkilerini inceliyoruz.

Emre TaştutanEmre Taştutan
11 dk
Java & Kurumsal Mimari

Project Loom Üçlemesi Tamamlanıyor: JEP 543 ile Structured Concurrency'nin Nihai Mimarisi, JEP 540 Yerleşik JSON API ve Kurumsal Mikroservislerde Eşzamanlılık Devrimi

Devoxx Belgium 2026 sahnesinde Alan Bateman ve Viktor Klang'ın paylaştığı mimari sırlar: JDK 27 (JEP 533) ile keskinleşen ve JDK 28 (JEP 543) ile kalıcı hale gelmeye hazırlanan StructuredTaskScope API'sinin derinlemesine analizi, Joiner stratejileri, yetim thread sızıntılarının sonu ve JEP 540 Simple JSON API ile Veri Odaklı Programlama (DOP) vizyonu.

Emre TaştutanEmre Taştutan
13 dk