Middle
Dartdagi axlat yig'uvchi haqida nima bilasiz?
sobes.tech AI
AIdan javob
Dart bir yondoshli tozalash yig'uvchisini ishlatadi va bu avlodli yig'ish asosida ishlaydi.
Asosiy xususiyatlar:
- Avlodli yig'ish: Ob'ektlar ikki avlodga bo'linadi:
- Yosh avlod: Yangi va qisqa umrli ob'ektlar. Tez-tez yig'iladi.
- Eski avlod: Uzun umrli ob'ektlar, yosh avlodda bir nechta yig'ishlardan o'tgan. Kamroq yig'iladi.
- Stop-the-World: Axborotlarni yig'ish uchun dastur (Dart Isolates)ni to'xtatish talab qilinadi. Biroq, yagona ip va optimallashtirishlar tufayli kechikishlar minimal bo'ladi.
- Mark-and-Sweep: Eski avlodda Mark-and-Sweep algoritmi qo'llaniladi. Avvalo, erishish mumkin bo'lgan ob'ektlar belgilab olinadi, keyin erishib bo'lmaydiganlar o'chiriladi. Yosh avlod uchun Copying Collector algoritmi ishlatiladi, u jonli ob'ektlarni tezda boshqa xotira joyiga ko'chiradi.
- Yig'ish tsikllari yo'q: Dasturchi xotirani qo'lda boshqarishi yoki GC ni chaqirishi shart emas. Tizim buni avtomatik qiladi.
- Optimizatsiyalar: Funktsiyalarni inline qilish, turlarni maxsuslashtirish va ob'ektlarni stackda ajratish, tozalash yig'uvchining yukini kamaytiradi.
Masalan, yangi ob'ekt yaratishda:
// Yosh avlod xotirasida yangi ob'ekt yaratish
var myObject = MyClass();
Agar myObject uzoq vaqt xotirada qolsa va mavjud bo'lsa, u vaqt o'tishi bilan "eski" avlodga o'tkaziladi. Agar u erishilmay qolsa, tozalash yig'uvchisi uni oxir-oqibat bo'shatadi.
// myObject endi erishilmaydi, tozalash yig'uvchisi uni yig'ib olishi mumkin
myObject = null;
Dartdagi tozalash yig'uvchisi samarali, ammo u xotira oqib ketishlariga qarshi panacea emas, bu esa kuchli manbalarni saqlash bilan bog'liq bo'lishi mumkin (masalan, bekor qilinmagan obuna).