Ana içeriğe geç
Programlama

Java Valhalla değer sınıfları her senaryoda performans kazandırmıyor

Öne çıkanlar

  • JDK 28 ile gelen JEP 401, kimliksiz değer sınıfları sayesinde bellek düzleştirmesi ve sayısallaştırma sağlıyor.
  • Değişken alanlar veri yarışını önlemek için değer sınıflarını referans düzeninde tutmaya devam ediyor.
  • Megamorphic arayüz çağrıları, tip silme nedeniyle değerlerin yığında yeniden nesneleşmesine yol açıyor.

JDK 28 için önizleme özelliği olarak sunulan JEP 401, Java Sanal Makinesi'ne (JVM) değer sınıflarını (value classes) kazandırdı. Bu özellik sayesinde nesne kimliği zorunluluğu ortadan kalkıyor, JVM bellek düzleştirmesi (flattening) ve sayısallaştırma (scalarization) gibi optimizasyonları daha agresif şekilde uygulayabiliyor. Ancak JVM mühendisleri, tüm sınıfları doğrudan değer sınıfına dönüştürmenin her koşulda performans artışı sağlamayacağını ve bazı durumlarda yavaşlamaya yol açabileceğini açıkladı.

JVM, değişmez (immutable) alanlara sahip değer sınıflarını bellek üzerinde doğrudan düzleştirerek yığın tahsisatını (heap allocation) ve işaretçi takibini azaltabiliyor. Değişken (mutable) alanlar veya çok iş parçacıklı yarış durumları söz konusu olduğunda ise veri bozulmasını engellemek amacıyla referans gösterimine geri dönüyor. Bu durum, derleyicinin farklı gösterimler arasında sürekli dönüştürme yapmasını gerektiriyor.

Özellikle Java'nın tip silme (type erasure) mekanizması ile birleşen çok biçimli (megamorphic) sanal çağrılarda performans sorunları belirginleşiyor. C2 derleyicisi çağrı noktalarını satır içine alamadığında (inline), yassılaştırılmış değerleri genel arayüz çağrısına iletmek için yeniden yığında nesne oluşturmak (materialization) zorunda kalıyor. C2 derleyici ekibi, bu tür arayüz sınırlarında yaşanan performans kayıplarını azaltmak üzere çalışmalarını sürdürüyor.

Kaynak

Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.