Java’da Değer Sınıflarının Ötesinde Değişmez Veri Mimarisi, JDK 28 ZGC Hızlı Başlatma (JEP 545/546) ve Spring Data 2026.1.0-RC1
30 Ekim 2026 Java ve Spring bülteninde üç kritik mühendislik başlığı öne çıkıyor: Oracle Java Mimarı Dan Smith’in aktardığı Değer Sınıfları (Value Classes) ötesindeki değişmez veri (Immutable Data) ekosistemi, JDK 28’de ZGC başlatma ve yığın yönetimini dönüştüren JEP 545/546 ikilisi ve Spring Data 2026.1.0-RC1 ile jOOQ tip güvenli SQL mimarisi.

Modern Java platformu bir yandan dil düzeyinde Veri Odaklı Programlama (Data-Oriented Programming) ve Değişmezlik (Immutability) garantilerini derinleştirirken, diğer yandan çalışma zamanında çöp toplayıcı (GC) başlatma hızını ve veritabanı erişim katmanlarını yeniden tanımlıyor. 29–30 Ekim 2026 itibarıyla OpenJDK ve Spring ekosistemlerinde öne çıkan üç kritik gelişme; Inside Java Podcast #73 kapsamında Dan Smith tarafından detaylandırılan Değer Sınıflarının Ötesinde Değişmez Veri mimarisi, JDK 28’de ZGC için geliştirilen JEP 545 / JEP 546 bellek optimizasyonları ve Spring Data 2026.1.0-RC1 ile jOOQ ekosistemindeki veri katmanı yenilikleri oldu.
Bu teknik bültende, söz konusu üç mühendislik başlığının kurumsal Java mimarilerine etkileri incelenmektedir.
1. Değer Sınıflarının (Value Classes) Ötesinde Değişmez Veri Mimarisi (Inside Java #73)
Resmi OpenJDK yayını Inside Java Podcast’in 29 Ekim 2026 tarihli 73. bölümünde ('Immutable Data Beyond Value Classes'), Nicolai Parlog ve Oracle Kıdemli Java Platform Geliştiricisi (Project Amber & Valhalla üyesi) Dan Smith, Java’nın değişmez veri (immutable data) vizyonunu masaya yatırdı.
JDK 28’de önizlemesi süren JEP 401 (Value Classes and Objects), nesne kimliğini (object identity) ortadan kaldırarak JVM’in değişmez nesneleri yığında (stack) skalerleştirmesine ve dizilerde düzleştirmesine (heap flattening) olanak tanıyor. Ancak Dan Smith, gerçek bir değişmez veri ekosisteminin yalnızca value class anahtar kelimesinden ibaret olmadığını; birbirini tamamlayan dört dil ve çalışma zamanı mekanizmasıyla bütünleştiğini vurguluyor:
- Esnek Kurucu Gövdeleri (
Flexible Constructor Bodies— JEP 492 / JEP 513): Kurucu metotlardasuper(...)çağrısından önce parametre doğrulaması (validation), savunmacı kopyalama (defensive copying) ve alan ataması yapılmasına izin verir. Bu sayede kısmen başlatılmış (partially initialized) bir nesneninthisreferansının dışarı sızması derleme zamanında engellenerek katı başlatma (strict field initialization) garantisi sağlanır. - Türetilmiş Kayıt Oluşturma (
Derived Record Creation/withİfadeleri — JEP 468): Çok alanlı değişmez birrecordveyavalue recordnesnesinin yalnızca bir veya birkaç alanını güncelleyerek yeni bir kopya üretmek için kullanılan tahribatsız dönüşüm (withbloğu) sözdizimi, hantal Builder sınıflarına olan ihtiyacı ortadan kaldırır. - Tembel Sabitler (
Lazy Constants/Stable Values— JEP 502): Değişmezliği bozmadan, maliyetli alanların kurucu anında değil ilk erişildiğinde tam olarak bir kez (at-most-once) güvenli biçimde hesaplanmasını ve sonrasında JIT derleyicisi tarafından sabit katlama (constant folding) optimizasyonuna tabi tutulmasını sağlar. - Kayıt Kalıpları (
Record Patterns) ve Veri Odaklı Programlama: Değişmez veri taşıyıcılarınınswitchifadeleri içinde yapıbozuma (deconstruction) uğratılarak yan etkisiz paralel işlenmesi.
flowchart LR
subgraph Construction["1. Güvenli İnşa Katmanı"]
FCB["Esnek Kurucu Gövdeleri\n(super Öncesi Doğrulama & Katı Alanlar)"]
end
subgraph MemoryLayout["2. JVM Bellek ve JIT Katmanı"]
VC["Value Classes (JEP 401)\n(Kimliksiz Düzleştirilmiş Bellek)"]
LC["Lazy Constants / Stable Values\n(İlk Kullanımda Hesaplama & Constant Folding)"]
end
subgraph Transformation["3. Tahribatsız Dönüşüm"]
DRC["Derived Record Creation (with)\n& Record Patterns"]
end
Construction --> MemoryLayout --> Transformation
2. JDK 28’de ZGC Devrimi: JEP 545 (Hızlı Başlatma ve Isınma) ve JEP 546 (Uyarlanabilir Yığın)
Düşük gecikmeli (sub-millisecond pause) Z Garbage Collector (ZGC), büyük ölçekli mikroservislerde kuyruk gecikmesini (P99.9 latency) minimize etse de, geleneksel olarak uygulama başlangıcında fiziksel bellek sayfalarını edinme ve hazırlama maliyeti nedeniyle G1GC veya ParallelGC’ye kıyasla biraz daha yavaş bir soğuk başlatma (cold-start) profiline sahipti.
Erik Österlund liderliğinde JDK 28 için yürütülen iki kardeş JEP, ZGC’nin bu kısıtını doğrudan ortadan kaldırıyor:
- JEP 545 (
Faster Startup and Warmup with ZGC): ZGC’nin başlangıç anında işletim sisteminden fiziksel bellek edinme, sanal adres haritalama ve sayfa hazırlama (page commit/pre-touch) algoritmalarını yeniden tasarlar. Bellek sayfaları yalnızca uygulamanın o anki gerçek tahsis ihtiyacına göre çok daha çevik biçimde hazırlanarak uygulama başlatma (startup) ve JIT ısınma (warmup) süreleri belirgin biçimde kısaltılır. - JEP 546 (
Adaptive Heap Sizing for ZGC): Konteyner ve Kubernetes ortamlarında çalışan Java servislerinde-Xmsve-Xmxbayraklarını elle ayarlama zorunluluğunu azaltır. ZGC; tahsis hızını, boş bellek miktarını ve makinedeki komşu süreçlerin bellek baskısını izleyerek yığın boyutunu çalışma zamanında otonom olarak büyütüp küçültür.
| Bileşen / JEP | Odak Alanı | Çözülen Mühendislik Darboğazı |
|---|---|---|
| Project Valhalla / Amber (Inside Java #73) | Value Classes, with İfadeleri, Lazy Constants |
Kimliksiz bellek düzleştirme, güvenli super öncesi başlatma ve tembel sabit katlama |
| JDK 28 — JEP 545 | ZGC Hızlı Başlatma ve Isınma | ZGC fiziksel bellek sayfası hazırlama gecikmesinin giderilmesi (Hızlı Cold-Start) |
| JDK 28 — JEP 546 | ZGC Uyarlanabilir Yığın Boyutlandırma | Manuel -Xms/-Xmx ayarı olmadan dinamik konteyner bellek uyumu |
| Spring Data 2026.1.0-RC1 | RedisJsonTemplate & SubscriptionListener |
Yerel RedisJSON belge yolu işlemleri ve anotasyonlu Pub/Sub abonelik olayları |
| jOOQ & Spring Boot (Lukas Eder) | Derleme Zamanı Tip Güvenli SQL DSL | ORM çalışma zamanı hatalarını önleyen şema güdümlü Java Record projeksiyonları |
3. Spring Data 2026.1.0-RC1 (RedisJsonTemplate) ve jOOQ ile Tip Güvenli Veri Katmanı
Veri erişim katmanında ise Spring Data 2026.1.0-RC1 sürüm treni ve A Bootiful Podcast’te Josh Long ile jOOQ yaratıcısı Lukas Eder arasında gerçekleştirilen teknik söyleşi öne çıkıyor:
- Spring Data 2026.1.0-RC1 Yenilikleri: Mark Paluch tarafından duyurulan sürüm adayı; Spring Data Commons, JPA, Relational, Redis, KeyValue ve LDAP modüllerini
4.2-RC1, MongoDB, Cassandra ve REST modüllerini5.2-RC1, Elasticsearch ve Couchbase modüllerini6.2-RC1ve Neo4j modülünü8.2-RC1seviyesine taşıyor. Özellikle Spring Data Redis4.2-RC1içerisinde:- JSON belgelerini doğrudan Redis üzerinde JSONPath ile okumayı ve kısmi güncellemeyi sağlayan
RedisJsonTemplateAPI’si olgunlaştırıldı. - Anotasyonlu Pub/Sub dinleyici metotlarına sahip Spring bean’leri
SubscriptionListenerarayüzünü uyguladığında, kanal abonelik bildirimlerinin doğrudan ilgili bean’e iletilmesi sağlandı.
- JSON belgelerini doğrudan Redis üzerinde JSONPath ile okumayı ve kısmi güncellemeyi sağlayan
- jOOQ ve Tip Güvenli SQL Mimarisi (Lukas Eder): 29 Ekim 2026 tarihli A Bootiful Podcast bölümünde Lukas Eder, karmaşık analitik ve kurumsal sorgularda SQL’i gizlemek yerine veritabanı şemasından üretilen derleme zamanı tip güvenli Java DSL’inin (jOOQ) değişmez Java
recordprojeksiyonlarıyla birleştirildiğinde hem insan geliştiriciler hem de AI kodlama ajanları için şema halüsinasyonlarını tamamen sıfırladığını vurguladı.
4. Kod Uygulaması: Değişmez Veri Kalıpları, RedisJsonTemplate ve SubscriptionListener
Aşağıdaki Java referans uygulaması; esnek kurucu doğrulamasıyla korunan değişmez bir record modelini, Spring Data Redis 2026.1 (4.2-RC1) içerisindeki SubscriptionListener destekli Pub/Sub bileşenini ve tip güvenli projeksiyon akışını göstermektedir:
package com.enterprise.data.immutable;
import java.math.BigDecimal;
import java.time.Instant;
import java.util.Objects;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.SubscriptionListener;
import org.springframework.stereotype.Component;
/**
* 1. Değişmez Veri (Immutable Data) ve Savunmacı Kurucu Doğrulaması:
* Değer sınıfları (Value Classes) ve Record mimarisiyle uyumlu veri taşıyıcısı.
*/
public record ImmutableOrderLedgerEvent(
String orderId,
String tenantId,
BigDecimal totalAmount,
Instant occurredAt
) {
public ImmutableOrderLedgerEvent {
Objects.requireNonNull(orderId, "orderId boş olamaz");
Objects.requireNonNull(tenantId, "tenantId boş olamaz");
if (totalAmount == null || totalAmount.signum() < 0) {
throw new IllegalArgumentException("Sipariş tutarı negatif olamaz: " + totalAmount);
}
occurredAt = (occurredAt != null) ? occurredAt : Instant.now();
}
/**
* Tahribatsız (Non-Destructive) Dönüşüm Metodu:
* Mevcut değişmez nesneyi bozmadan güncellenmiş tutarla yeni örnek döndürür.
*/
public ImmutableOrderLedgerEvent withAdjustedAmount(BigDecimal newAmount) {
return new ImmutableOrderLedgerEvent(this.orderId, this.tenantId, newAmount, Instant.now());
}
}
/**
* 2. Spring Data Redis 2026.1.0-RC1 (4.2-RC1):
* SubscriptionListener uygulayan dinleyici bean'lere abonelik olaylarının doğrudan iletilmesi.
*/
@Component
class OrderLedgerRedisSubscriber implements SubscriptionListener {
public void handleOrderEvent(String payload, String channel) {
System.out.printf("[REDIS EVENT] Kanal: %s | Yük: %s%n", channel, payload);
}
@Override
public void onChannelSubscribed(byte[] channel, long count) {
System.out.printf("[SUBSCRIPTION LISTENER] Kanala abone olundu: %s (Aktif abonelik: %d)%n",
new String(channel), count);
}
@Override
public void onChannelUnsubscribed(byte[] channel, long count) {
System.out.printf("[SUBSCRIPTION LISTENER] Kanal aboneliği sonlandı: %s%n", new String(channel));
}
}
5. Mühendislik Özeti
OpenJDK ve Spring ekosistemlerindeki bu üç gelişme, modern Java mimarisinin yönünü netleştiriyor: Uygulama belleğinde Value Classes, Esnek Kurucular ve Tembel Sabitler ile değişmezlik sıfır ek maliyetle standartlaşırken; JDK 28 JEP 545 ve JEP 546 sayesinde ZGC hem hızlı başlayan hem de yığınını kendi kendine boyutlandıran evrensel bir çöp toplayıcıya dönüşüyor. Veri katmanında ise Spring Data 2026.1 ve jOOQ, bu değişmez veri yapılarını doğrudan tip güvenli sorgular ve yerel JSON/Pub-Sub kanallarıyla besliyor.
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!
Bu Kategorideki Diğer İncelemeler
OpenJDK ‘Project Detroit’ (FFM ile V8 ve CPython), Spring Boot Yerel ‘Cloud Foundry / kind’ Orkestrasyonu ve Quarkus 4.0 Mimarisi
OpenJDK'nın Foreign Function & Memory (FFM) API üzerinden Google V8 ve CPython çalışma zamanlarını doğrudan JVM sürecine gömen Project Detroit girişimi, Spring Boot uygulamalarında Docker/kind tabanlı yerel Cloud Foundry dağıtımı ve Quarkus 4.0 (Vert.x 5, HTTP/3, Hibernate 8) mimarisi inceleniyor.
JDK 28’de ‘JEP 401 Value Classes’ ve Değişmez Veri Mimarisi, Spring AI 2.1 ‘MessagePart’ Akıl Yürütme Korunumu ve Özel Vektör ‘Upsert’ API’si
OpenJDK 28 erken erişim sürümlerinde 30 çekirdek sınıfı kimliksiz değer nesnesine dönüştüren JEP 401 (Value Classes), çok turlu akıl yürütme imzalarını kayıpsız taşıyan Spring AI 2.1 MessagePart mimarisi ve önceden hesaplanmış float[] vektörleri destekleyen VectorStore.upsert() yetenekleri inceleniyor.