CodeBlanks Logo Icon CodeBlanks

Allocation

Nesne ayırma ve GC etkisini öğrenirsin.

Allocation ve GC

Allocation, JVM'de yeni bir nesnenin heap'e ayrılmasıdır. Her ayırma, çöp toplayıcıyı (GC) çalışmaya yaklaştırır; GC duraklamaları uygulamayı yavaşlatabilir.

Örneğin List(n) { it } n adet Integer nesnesi ayırır (kutulanmış primitive). Bunun yerine IntArray(n) kutusuz primitive tutar ve allocation'ı düşürür. Sık döngüde nesne yaratmaktan kaçınır; nesneleri yeniden kullanırsın. Bu dersteki allocInfo modeli konsepti gösterir.

Allocation'ı azaltmak

Allocation'ı azaltmanın yolları: primitive diziler kullanmak, nesneleri havuzlamak ve gereksiz ara koleksiyonlardan kaçınmaktır.

Örneğin IntArray(100) yerine Array<Int> 100 kutulanmış nesne yaratır. StringBuilder ile dize birleştirme, her seferinde yeni String yaratmaz. Sequence ara listeleri ortadan kaldırır. Bu küçük değişiklikler sıcak döngülerde büyük fark yaratır.

Uygulama allocInfo yaz

fun allocInfo(): String tanımla. "Allocation" döndürsün. main içinde println(allocInfo()) yaz.

Başlangıç kodu

Main.kt
// allocInfo fonksiyonunu ekle

fun main() {
    // allocation bilgisini yazdır
}

Örnek çözüm

Main.kt
fun allocInfo(): String = "Allocation"
fun main() {
    println(allocInfo())
}

Beklenen çıktı

Allocation

Soru ve cevaplar

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

1 alloc gövdesini tamamla

Soru
fun alloc(n: Int): List<Int> = List(n) { ____ }
Cevap
fun alloc(n: Int): List<Int> = List(n) { it }

Açıklama: List(n) { it } her indekste bir nesne ayırır.

2 Allocation parçalarını eşle

Kavram Anlamı
allocation Heap ayırma
GC Çöp toplayıcı
IntArray Kutusuz dizi
StringBuilder Dize birleştirme

3 Hangisi allocation'ı azaltır?

Main.kt
A primitive array allocates fewer objects.
  • Her döngüde yeni List
  • String birleştirme
  • data class yaratma
  • IntArray (kutulu Array yerine) Doğru cevap

Açıklama: IntArray kutusuz primitive tutar; allocation düşer.

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