Sobes.tech
Middle+

Go proqramlaşdırma dilində çöp toplayıcısı necə işləyir?

sobes.tech Süni İntellekt

AI-dan cavab

Go'da çöp to'plovchi, belgilash va tozalash algoritmiga asoslangan bo'lib, xotira ajratish asosida ishlaydi. U asosiy dastur bilan parallel ishlaydi va pauzalarni minimallashtiradi.

Asosiy nuqtalar:

  • Uchta rang to'plami:
    • Oq: Tashrif buyurilmagan va potentsial axlat bo'lgan ob'ektlar.
    • Kulrang: O'sha ildizlardan kirish mumkin bo'lgan, ammo hali skanerlashmagan ob'ektlar.
    • Qora: O'sha ildizlardan kirish mumkin bo'lgan va allaqachon skanerlashgan ob'ektlar.
  • Belgilang: To'plovchi ildizlardan (globallashgan o'zgaruvchilar, har bir goroutine yordami) boshlanadi va kirish mumkin bo'lgan ob'ektlarni kulrangga belgilaydi. Keyin u rekursiv ravishda kulrang ob'ektlarni skanerlash, ulardan kirish mumkin bo'lganlarni kulrangga belgilash va skanerlashgan ob'ektlarni qora qilish.
  • STW fazasi (Dastur to'xtatish) belgilanganda: Belgilashning boshlanishida va oxirida, ob'ektlar grafigining suratini olish uchun barcha goroutine'larning bajarilishi qisqa vaqt to'xtatiladi.
  • Parallel belgilang: Belgashning katta qismi dastur bajarilishi bilan parallel ravishda amalga oshiriladi.
  • Olib tashlash: Belgilashdan so'ng, qolgan oq ob'ektlar kirish mumkin emas deb hisoblanadi va bo'shatiladi. Go ochiq ko'rsatkichlarni nolga o'rnatishni talab qilmaydi.
// Misol: ob'ekt kirish mumkin bo'lsa
type Data struct {
    value int
}

func main() {
    d1 := &Data{value: 10} // Ob'ekt yaratilgan, kirish mumkin
    _ = d1                 // Ob'ektni ishlatish

    d1 = nil // Ob'ekt endi d1 o'zgaruvchisidan kirish mumkin emas.
            // Axirjog'och to'plovchi uni keyingi siklda bo'shatishi mumkin.

    // Boshqa ob'ektlar, ularga hech kim murojaat qilmasa, ham to'planishi mumkin.
}
  • Trigger: To'plovchi, ajratilgan xotira miqdori avvalgi ajratilgan xotira miqdoridan oshganda ishga tushadi. Standartda, bu chegaraning ikki barobar ko'pi avvalgi foydalanilgan xotira miqdori.
  • Ma'goal: Uzoq davom etadigan "Stop-The-World" pauzalarni oldini olib, past kechikishni ta'minlash.
// To'plovchining xulqini muhit o'zgaruvchilari orqali boshqarish mumkin
// masalan, GOGC=off ni o'rnatish, axlat to'plashni deaktivatsiya qiladi.

Umuman olganda, Go'dagi axlat to'plovchi samarali bo'lib, dasturchidan minimal ishtirokni talab qiladi.