Arşivler

Java 25 : Stable Values API Nedir? JEP 502

Java 25 : Stable Values API Nedir? JEP 502
Java 25 : Stable Values API Nedir? JEP 502

Java 25, performansı artırmak ve veri tutarlılığını sağlamak için Stable Values API adını verdiği yeni bir özelliği duyurdu. Bu yazıda bu API’nin ne işe yaradığını, neden geliştirildiğini ve nasıl kullanıldığını açıklayacağım.

Final Nasıl Çalışır?

Java’da bir alanı final olarak tanımladığınızda, bu alanın değerini yalnızca bir kez atayabilirsiniz. Genellikle bunu constructor içinde ya da static initializer bloklarında yaparsınız. Bu da uygulama başladığında bazı nesneleri erken oluşturmanıza yol açar.

Ancak her nesneye başlangıçta ihtiyaç duymayız. Bu da performans sorunlarını ve gereksiz kaynak tüketimini beraberinde getirir. Bu sorunu aşmak için geliştiriciler genellikle lazy initialization gibi yaklaşımları uygular.

İşte Stable Values API tam da bu sorunu çözmek için Java 25 ile geldi.

Stable Values API Nedir?

JEP 502, Java 25 ile geldi ve JVM’in gerçekten final olarak kabul ettiği, lazy yani yalnızca ihtiyaç halinde ve en fazla bir kez başlatılan immutable değerleri temsil eden bir API tanımladı.

Stable Values sayesinde uygulama başlatma süresini iyileştirir ve gereksiz erken başlatma maliyetlerini azaltır.

Java, StableValue’ları thread-safe olacak şekilde tasarladı ve yalnızca bir kez başlatılmalarını garanti altına aldı. Multithread ortamında, birden fazla iş parçacığı aynı anda aynı değeri başlatmaya çalışırsa, yalnızca ilk thread bu başlatmayı gerçekleştirir. Diğer thread’ler, değer tamamen başlatılana kadar bekler ve ardından aynı başlatılmış değeri paylaşır. Bu mekanizma, hem veri tutarlılığını sağlar hem de gereksiz tekrarlı başlatma işlemlerini engeller.

StableValue Sınıfı ve Kullanım Örneği

class StudentController {
    private final StableValue<Logger> logger = StableValue.of();

    Logger getLogger() {
        return logger.orElseSet(() -> Logger.create(StudentController.class));
    }
}Code language: Java (java)
  • StableValue.of() ile boş bir değer oluşturuyoruz.
  • orElseSet() ile, sadece ihtiyaç duyulduğunda lambda ile değer ataması yapılmasını sağlıyoruz.
  • JVM bunu final gibi optimize eder, thread-safe şekilde yalnızca bir kez çalıştırır.

👉 Detaylı bilgi için JEP sayfasını inceleyebilirsin.