CodeBlanks Logo Icon CodeBlanks

Memory model

Kotlin/Native memory model'ini öğrenirsin.

Yeni bellek modeli

Kotlin/Native, başlangıçta katı bir iş parçacığı yalıtımı (strict thread isolation) kullanıyordu: her iş parçacığının kendi yığını vardı ve paylaşım yoktu. Yeni bellek modeli bunu gevşetti.

Yeni modelde, sıkıştırılmış iş parçacıkları arası paylaşım ve global işlem (global STW) çöp toplayıcı vardır. Bu, Kotlin/Native ve JVM arasında davranış uyumu sağlar. Yeni model varsayılan olarak Kotlin 1.9+'da etkindir; binaryOption("memoryModel", "experimental") gibi eski ayarlar kalkmıştır. Bu sayede mutableSharedState daha doğal yazılır; donmalar (frozen) büyük ölçüde tarihe karışmıştır.

Counter örneği

Yeni bellek modelinde, bir Counter sınıfı farklı iş parçacıklarında paylaşılabilir. Eski model bu durumda döndürma (freeze) gerektirirdi; yeni model gerektirmez.

Örnek: class Counter(private var n: Int = 0) { fun inc() { n += 1 }; fun get(): Int = n }. Yeni modelde bu sınıfı bir coroutine içinde Counter() yapıp başka bir coroutine'de inc() çağrılabilir; freeze() gerekmez. Eski modelde bu kod InvalidMutabilityException fırlatırdı. Bu dersteki alıştırmada basit bir Counter yazacaksın; bellek modelinin getirdiği rahatlığı göreceksin.

Uygulama Counter yaz

class Counter(private var n: Int = 0) tanımla. fun inc() metodu n'yi bir artırsın; fun get(): Int n'yi döndürsün. main içinde val c = Counter() yapıp iki kez c.inc() çağır ve println(c.get()) yaz.

Başlangıç kodu

Main.kt
// Counter sınıfını ekle

fun main() {
    // iki kez inc çağır ve get sonucunu yazdır
}

Örnek çözüm

Main.kt
class Counter(private var n: Int = 0) {
    fun inc() { n += 1 }
    fun get(): Int = n
}
fun main() {
    val c = Counter()
    c.inc(); c.inc()
    println(c.get())
}

Beklenen çıktı

2

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bellek modeli eşle

Kavram Anlamı
Yeni model Paylaşımlı yığın
Eski model İş parçacığı yalıtımı
GC Çöp toplayıcı
freeze Eski döndürma

2 Yeni bellek modeli neyi kaldırdı?

  • Döndürma (freeze) gerekliliğini Doğru cevap
  • Coroutine'leri
  • Type inference'ı
  • Sınıf tanımlarını

Açıklama: Yeni model dondurmayı gereksiz kıldı; paylaşım serbestçe yapılır.

3 inc metodunu tamamla

Soru
class Counter(private var n: Int = 0) {
    fun ____() { n += 1 }
    fun get(): Int = n
}
Cevap
class Counter(private var n: Int = 0) {
    fun inc() { n += 1 }
    fun get(): Int = n
}

Açıklama: inc() sayacı bir artırır.

Uzman bölümündeki tüm dersler