Allocation
- Kotlin kursu
- Uzman
- Ders 38/47
- 5 dk
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
// allocInfo fonksiyonunu ekle
fun main() {
// allocation bilgisini yazdır
}Örnek çözüm
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
fun alloc(n: Int): List<Int> = List(n) { ____ }
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?
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.