Sobes.tech
Middle+

Go программалоо тилинде калдык чогултуучу кантип иштейт?

sobes.tech AI

AIден жооп

Go дөңгөлөкчүсү маркалоо-удалдо алгоритмине негизделген, эс тутумду бөлүү триггери менен иштейт. Ал негизги программа менен бирге иштейт жана токтоолорду минималдаштырат:

Негизги учурлар:

  • Үч түс жыйнагы:
    • Ак: Көбүнчө көрбөгөн жана мүмкүн болсо калдык деп эсептелген объекттер:
    • Сары: Тамырлардан жеткиликтүү объекттер, бирок дагы сканерленбеген:
    • Кара: Тамырлардан жеткиликтүү жана алгачкы сканерленген объекттер:
  • Белгилөө: Жыйнагы башталганда, тамырлардан (глобалдык өзгөрмөлөр, ар бир горутиндин стеку) баштап, жеткиликтүү объекттер сары деп белгиленет. Андан соң ал рекурсивдүү сары объекттерди сканерлеп, алардын жеткиликтүү болгон объекттерин сары деп белгилейт, ал эми сканерленген объекттер кара болуп калат:
  • STW фазасы (Достуруу-Жерге): Белгилөө учурунда бардык горутиндер кыска убакытка токтотулат, объекттер графигинин сүрөтүн алуу жана абалын өзгөртүү үчүн:
  • Параллелдүү белгилөө: Белгилөө негизги бөлүгү программалык иш менен бирге жүргүзүлөт:
  • Жок кылуу: Белгилөө аяктагандан кийин, ак түстөгү калган бардык объекттер жеткиликтүү эмес деп эсептелип, бошотулат:
// Мисал: объект жеткиликтүү эмес болуп калганда
type Data struct {
    value int
}

func main() {
    d1 := &Data{value: 10} // Объект түзүлдү, жеткиликтүү
    _ = d1                 // Объектти колдонуу

    d1 = nil // Объект эми жеткиликтүү эмес, d1 өзгөрмөсүнөн:
            // Жыйнагычы аны кийинки циклде бошотушу мүмкүн:

    // Башка объекттер, аларга эч ким шилтеме жасабайт, дагы жыйналышы мүмкүн:
}
  • Триггер: Жыйнагыч ишке кирет, эгер бөлүнгөн эс тутум көлөмү белгилүү бир чекеден ашса, ал мурда бөлүнгөн эс тутумдун көлөмүнө жараша:
  • Максат: Узакка созулган "Достуруу-Жерге" токтотууларын болтурбоо үчүн төмөнкү кечигүүнү сактоо:
// Жыйнагычтын ишин башкаруу үчүн айлана-чөйрө өзгөрмөлөрүн колдонсо болот
// Мисалы, GOGC=off коюу менен жыйнагыч өчүрүлөт:

Жалпысынан, Go жыйнагычы эффективдүү жана иштеп чыгуучунун минималдуу катышуусун талап кылат.