Ana Sayfa/Java & Kurumsal Mimari
Java & Kurumsal Mimari·2 Kasım 2026·7 dk okuma

JDK 28’de Project Leyden ‘JEP 544’ AOT Kod Derleme, Oracle Helidon 27 ‘Tip & Tail’ Mimarisi ve Micronaut 5.2.4 / Spring Boot Uber-Jar Optimizasyonu

JDK 28’de Project Leyden ‘JEP 544’ AOT Kod Derleme, Oracle Helidon 27 ‘Tip & Tail’ Mimarisi ve Micronaut 5.2.4 / Spring Boot Uber-Jar Optimizasyonu

1. JDK 28 ve Project Leyden’de Nihai Halka: ‘JEP 544: Ahead-of-Time Code Compilation’

OpenJDK ekosisteminde Java uygulamalarının soğuk başlatma (cold start) ve tepe performansa ısınma (time-to-peak-performance) gecikmelerini ortadan kaldırmak amacıyla yürütülen Project Leyden, JDK 28 yol haritasındaki en kritik kilometre taşına ulaştı. Daha önce kademeli olarak teslim edilen JEP 483 (JDK 24 — AOT Sınıf Yükleme ve Bağlama), JEP 514/515 (JDK 25 — AOT Komut Satırı Ergonomisi ve Metot Profilleme) ve JEP 516 (JDK 26 — Herhangi Bir GC ile AOT Nesne Önbellekleme) adımlarının ardından, JEP 544 (Ahead-of-Time Code Compilation) ile birlikte JIT derleyicisinin ürettiği yerel makine kodu (native machine code) doğrudan AOT önbelleğine dahil ediliyor.

JEP 544 öncesinde OpenJDK AOT önbelleği; önceden bağlanmış sınıfları, yığın (heap) nesnelerini ve metot yürütme profillerini saklayabiliyordu; ancak uygulama üretimde ayağa kalktığında metotların yine de önce yorumlayıcıdan (interpreter) geçmesi ve C1/C2 JIT derleme basamaklarında CPU tüketerek derlenmesi gerekiyordu. JEP 544, kontrollü bir eğitim çalışması (training run) sırasında üretilen optimize edilmiş yerel makine kodunu .aot önbellek dosyasına yazarak üretim konteyneri başladığı ilk milisaniyede tam optimize makine kodunun yürütülmesini sağlıyor.

mermaid
flowchart LR
    subgraph Training["1. Eğitim Çalışması (Training Run)"]
        A["Uygulama Yükü & Isınma"] --> B["Sınıf Bağlama (JEP 483) +<br/>Metot Profilleme (JEP 515)"]
        B --> C["C2 JIT Yerel Makine Kodu Üretimi<br/>(JEP 544)"]
    end

    C -->|"Tekil AOT Önbelleği (app.aot)"| D[("Leyden AOT Cache")]

    subgraph Prod["2. Üretim Başlatması (-XX:AOTMode=on/required)"]
        D --> E["Yorumlayıcıyı Atla:<br/>Anında Yerel Makine Kodu Yürütme"]
        E --> F{"Çalışma Zamanı Yükü Değişti mi?"}
        F -->|"Hayır"| G["%65–80 Daha Hızlı Tepe Performans"]
        F -->|"Evet (Dinamik Yansıma / Yeni Dal)"| H["HotSpot C2 JIT ile Canlı Yeniden Optimizasyon"]
    end

GraalVM Native Image gibi statik derleyicilerden farklı olarak JEP 544, geliştiricileri "kapalı dünya" (closed-world assumption) kısıtlamalarına zorlamıyor:

  • Tam HotSpot Dinamizmi: Uygulama standart HotSpot JVM üzerinde çalışmaya devam ettiği için çalışma zamanı yansıması (runtime reflection), dinamik sınıf yükleme (ClassLoader), MethodHandles ve JVMTI ajanları hiçbir ek JSON yapılandırması gerektirmeden eksiksiz çalışıyor.
  • Canlı Yeniden Optimizasyon (Deoptimization & Re-JIT): Eğer üretim ortamındaki trafik deseni eğitim çalışmasından saparsa, HotSpot JVM önbellekteki AOT kodunu şeffaf biçimde devre dışı bırakıp C2 JIT derleyicisiyle yeni iş yüküne göre daha üstün bir makine kodu üretebiliyor.
  • Donanım ve GC Tutarlılık Denetimi: Yerel makine kodu CPU komut setine (AVX-512, NEON vb.) ve seçilen çöp toplayıcıya (ZGC, G1) duyarlı olduğundan, üretim ortamı eğitim ortamıyla uyuşmadığında JVM güvenli biçimde yedek (fallback) moda geçiyor veya -XX:AOTMode=required bayrağıyla erken hata (fail-fast) veriyor.

2. Oracle Helidon 27: ‘Tip & Tail’ Sürüm Modeli, Helidon Core ve ‘Helidon Data JDBC’

Oracle, bulut yerel (cloud-native) Java mikroservis çerçevesinde büyük bir mimari dönüşüme giderek Helidon 27 sürümünü yayımladı. Bu sürümle birlikte Helidon, Oracle’ın kütüphane geliştirme stratejisi olan "Tip & Tail" (Uç ve Kuyruk) modelini resmen benimsedi:

  1. Tip Kanalı (Helidon 27): Doğrudan JDK 27 ile hizalanan ve en güncel JVM özelliklerini (Sanal İş Parçacıkları, Yapılandırılmış Eşzamanlılık, Scoped Values) sıfır geriye dönük uyumluluk yüküyle sunan yenilikçi sürüm hattı.
  2. Tail Kanalı (Helidon 4.5.5 / 4.5.6): Kurumsal üretim ortamlarında JDK 21 LTS (ve JDK 25) üzerinde uzun vadeli kararlılık, güvenlik yamaları ve öngörülebilir bakım arayan ekipler için korunan LTS hattı.

Helidon 27’nin getirdiği en köklü mimari yenilik ise geleneksel Helidon SE yapısının yerini alan Helidon Core katmanı oldu. Helidon Core, geliştiricilere aynı hafif çekirdek üzerinde iki farklı programlama modeli sunuyor:

  • Imperative Model: Herhangi bir anotasyon, sihirli bayt kodu manipülasyonu veya bağımlılık enjeksiyonu (DI) olmadan saf Java yönlendirme ve yapılandırma kontrolü sağlar.
  • Declarative Model: Çalışma zamanı yansıması (runtime reflection) kullanmak yerine, derleme zamanı anotasyon işlemcileriyle (build-time annotation processing) saf imperative bağlama (wiring) kodu üreten yüksek performanslı bildirimsel geliştirme stili sunar.

Ayrıca Helidon 27 ile birlikte veritabanı işlemlerini standartlaştıran Helidon Data JDBC (io.helidon.data.jdbc) ve olay güdümlü iletişim için Helidon Messaging modülleri çekirdek ekosisteme eklendi. Helidon Data JDBC, çalışma zamanı ORM (Hibernate vb.) ek yükü olmadan derleme zamanında doğrulanmış tip güvenli veri depoları (repositories) oluşturulmasına olanak tanıyor.


3. Micronaut 5.2.4 Güvenlik Yamaları ve Spring Boot RC1 ‘Uber-Jar’ Optimizasyonu

Kurumsal mikroservis çerçevelerinin sonbahar 2026 sürüm dalgasında performans ve ağ katmanı güvenliği ön plana çıktı. Micronaut Vakfı, Ekim ayı boyunca yayımladığı güvenlik odaklı güncellemelerin devamı olarak Micronaut 5.2.4 sürümünü kullanıma sundu. Aynı dönemde Spring Boot ve Spring Framework tarafında yayımlanan RC1 (Release Candidate 1) paketleri ise konteyner imaj oluşturma ve arşiv okuma performansında önemli iyileştirmeler getirdi.

Çerçeve / Teknoloji Sürüm / JEP Öne Çıkan Mimari Değişiklik Üretim ve Güvenlik Etkisi
OpenJDK (Project Leyden) JDK 28 — JEP 544 JIT yerel makine kodunun AOT önbelleğine (app.aot) kaydedilmesi Kapalı dünya kısıtlaması olmadan %65–80 daha hızlı başlatma ve ısınma
Oracle Helidon Helidon 27 (Tip) & 4.5.6 (Tail) Helidon Core (Imperative/Declarative) ve Helidon Data JDBC Sıfır çalışma zamanı yansıması ile derleme zamanı tip güvenli JDBC depoları
Micronaut Framework Micronaut 5.2.4 Control Panel 2.2.1, Core 5.2.20 ve Netty 4.2.19.Final yükseltmesi Kritik HTTP/2 ve HTTP/3 codec güvenlik açıklarının kapatılması
Spring Boot / Framework 2026Sonbahar RC1 Dalgası İç içe JAR (nested jars) doğrudan sınıf/kaynak arama ve Ubuntu Resolute builder Uber-Jar başlatma G/Ç (I/O) gecikmesinin azaltılması ve gelişmiş RetryListener
  • Micronaut 5.2.4 ve Netty 4.2.19.Final: Yüksek önem dereceli güvenlik açıklarını gideren Micronaut Control Panel 2.2.1, Micronaut Core 5.2.20, Micronaut Data 5.2.4 ve Micronaut Serialization 3.2.6 bileşenlerinin yanı sıra, ağ omurgasını oluşturan Netty sürümü 4.2.19.Final seviyesine yükseltilerek çoklu HTTP/2 ve HTTP/3 çerçeve ayrıştırma zafiyetlerine karşı tam koruma sağlandı.
  • Spring Boot RC1 Doğrudan İç İçe JAR Arama: Spring Boot’un klasik çalıştırılabilir Uber-Jar mimarisinde, bağımlılık JAR’ları ana arşivin içinde sıkıştırılmamış olarak (BOOT-INF/lib/) yer alır. Yeni RC1 optimizasyonu, iç içe JAR arşivlerindeki sınıf ve kaynakları ararken ara dizin taramalarını atlayarak doğrudan indeks tabanlı okumaya geçiyor ve bulut yerel Buildpacks tarafında Ubuntu Resolute oluşturucusunu (builder) varsayılan hale getiriyor.

Mühendislik Uygulaması: Helidon 27 Declarative Veri Erişimi ve Leyden JEP 544 AOT Hazırlık Denetçisi

Aşağıdaki Java 27 referans uygulaması, Helidon 27’nin derleme zamanı bağlamalı bildirimsel (Declarative) servis mimarisini, Helidon Data JDBC tarzı yansımasız veri deposu desenini ve uygulamanın JDK 28 / Project Leyden JEP 544 AOT makine kodu önbelleğiyle (-XX:AOTMode) çalışıp çalışmadığını doğrulayan çalışma zamanı telemetri bileşenini bir arada göstermektedir:

java
package com.tastutanlabs.helidon27.aot;

import java.lang.management.ManagementFactory;
import java.time.Instant;
import java.util.List;
import java.util.Optional;

/**
 * Helidon 27 (Tip) & JDK 28 Project Leyden (JEP 544)
 * Yansımasız (Reflection-Free) Veri Erişimi ve AOT Makine Kodu Önbellek Denetçisi
 */
public final class HelidonLeydenTelemetryService {

    public record InvoiceProjection(
            String invoiceId,
            String tenantCode,
            long amountCents,
            Instant issuedAt
    ) {}

    public record AotRuntimeStatus(
            boolean aotCodeCacheActive,
            String aotModeFlag,
            long jvmUptimeMillis,
            String executionTier
    ) {}

    /**
     * Helidon Data JDBC (io.helidon.data.jdbc) derleme zamanı
     * tarafından üretilen yansımasız depo (repository) sözleşmesi örneği.
     */
    public interface InvoiceJdbcRepository {
        List<InvoiceProjection> findTopByTenantOrderByIssuedAtDesc(String tenantCode, int limit);
    }

    /**
     * JVM başlatma bayraklarını inceleyerek JEP 544 AOT makine kodu
     * önbelleğinin (-XX:AOTMode ve -XX:AOTCache) durumunu doğrular.
     */
    public AotRuntimeStatus inspectLeydenAotStatus() {
        List<String> jvmArgs = ManagementFactory.getRuntimeMXBean().getInputArguments();
        long uptime = ManagementFactory.getRuntimeMXBean().getUptime();

        Optional<String> aotMode = jvmArgs.stream()
                .filter(arg -> arg.startsWith("-XX:AOTMode="))
                .map(arg -> arg.substring("-XX:AOTMode=".length()))
                .findFirst();

        boolean cacheConfigured = jvmArgs.stream()
                .anyMatch(arg -> arg.startsWith("-XX:AOTCache=") || arg.startsWith("-XX:AOTCacheOutput="));

        String mode = aotMode.orElse("auto");
        boolean active = cacheConfigured && !"off".equalsIgnoreCase(mode);

        String tier = active
                ? "LEYDEN_JEP544_PRECOMPILED_NATIVE_CODE"
                : "STANDARD_HOTSPOT_TIERED_JIT";

        return new AotRuntimeStatus(active, mode, uptime, tier);
    }

    public static void main(String[] args) {
        HelidonLeydenTelemetryService service = new HelidonLeydenTelemetryService();
        AotRuntimeStatus status = service.inspectLeydenAotStatus();

        System.out.printf(
                "[Helidon 27 Core] Yürütme Katmanı: %s | AOT Modu: %s | Başlatma Süresi: %d ms%n",
                status.executionTier(),
                status.aotModeFlag(),
                status.jvmUptimeMillis()
        );
    }
}

Sonuç: Dinamizmden Ödün Vermeyen Sıfır Gecikmeli Java

Kasım 2026 itibarıyla Java ekosistemi, yıllardır süregelen "GraalVM Native Image ile hızlı başlatma mı, yoksa HotSpot JVM ile tam dinamizm ve yüksek tepe performans mı?" ikilemini Project Leyden JEP 544 ile kalıcı olarak çözüme kavuşturuyor. Helidon 27’nin derleme zamanı bildirimsel çekirdeği (Helidon Core & Data JDBC), Spring Boot’un doğrudan iç içe JAR indekslemesi ve Micronaut 5.2.4’ün sıkılaştırılmış ağ güvenliği bir araya geldiğinde, kurumsal Java mikroservisleri hem bulut maliyetlerinde hem de soğuk başlatma sürelerinde yeni bir mühendislik standardına ulaşmaktadır.

Konu Etiketleri
#Java#Spring Boot#JDK 28#Project Leyden#JEP 544#Helidon 27#Micronaut#JVM Performance
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

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.

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

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.

Emre TaştutanEmre Taştutan
10 dk