Sobes.tech
Middle+

Go тилиндеги калдык чогултуучу (garbage collector) жөнүндө айтып бер.

sobes.tech AI

AIден жооп

Go параллел, үч түстүү, компактсыз чогулткучту колдойт, ал төмөнкү кечигүүлөр менен иштейт.

Негизги иштөө принциптери:

  • Белгилөө (Mark): Бул корень көрсөткүчтөрдөн (регистерлер, горутин стектери, глобалдык өзгөрмөлөр) жеткиликтүү болгон объекттерди аныктайт. Үч түстүү алгоритм колдонулат (ак — көрүлбөгөн, боз — көрүлгөн, бирок мураскорлору текшерилбеген, кара — көрүлгөн жана бардык мураскорлору текшерилген).
  • Жыйноо (Sweep): Жеткиликтүү эмес объекттерди жоготуп, эс тутумду кайра колдонууга бошотот.

Өзгөчөлүктөрү:

  • Параллелдүү: Белгилөө колдонуучу коду иштеп жатканда параллелдүү жүргүзүлөт (STW — Stop-The-World фазалары өтө кыска).
  • Төмөн кечигүүлөр: Кошулманың иштөө убагын минималдаштыруу үчүн иштелип чыккан.
  • Компактсыз эмес: Жаш объекттерди эс тутумда которбойт, бул фрагментацияга алып келиши мүмкүн, бирок ишке ашырууну жөнөкөйлөтөт жана белгилөө/жыйноо ылдамдыгын жогорулатат.

Иш фазаалары:

  1. Mark жардамчысы: Колдонуучу горутиндер белгилөө фазасында эс тутум бөлүштүрүүдө жардам берет.
  2. Белгилөө: Жеткиликтүү объекттердин параллелдүү белгилөөсү.
  3. Белгилөө бүтүшү: Белгилөөнү аяктоо үчүн кыска STW фаза.
  4. Жыйноо: Жеткиликтүү эмес объекттердин параллелдүү жыйноосу.

Управление:

  • Автоматтык.
  • Чогултуу триггерлери GOGC айлана-чөйрө өзгөрмөсү аркылуу жөнгө салынат. Бөлүнгөн алдын ала мааниси — GOGC=100, бул чогултуу кутуча өлчөмү алдынкы циклге салыштырмалуу эки эсе көбөйгөндө башталат.
  • runtime.GC() функциясы чогултууну мажбурлайт, бирок анын колдонулушу стандарттык коддо сунушталбайт.
package main

import (
	"runtime"
	"time"
)

func main() {
	// Мажбурлап GC чакыруунун мисалы
	runtime.GC()

	// GC статистикасын алуу мисалы
	var memStats runtime.MemStats
	runtime.ReadMemStats(&memStats)
	// fmt.Printf("Жалпы бөлүнгөн эс тутум: %v байт\n", memStats.TotalAlloc)
}

Артыкчылыктары:

  • Эс тутумду автоматтык башкаруу, ката кетүү мүмкүнчүлүгүн азайтат (эстутум агып кетүү, эки эсе бошотуу).
  • Конкуренттүү ишке ашырууга ылайыкталган.

Кемчиликтери:

  • Нерминирленген иш убактысы.
  • Кол менен башкарууга салыштырмалуу эс тутумдун көбөйүшү мүмкүн.