Middle+
Go тилиндеги калдык чогултуучу (garbage collector) жөнүндө айтып бер.
sobes.tech AI
AIден жооп
Go параллел, үч түстүү, компактсыз чогулткучту колдойт, ал төмөнкү кечигүүлөр менен иштейт.
Негизги иштөө принциптери:
- Белгилөө (Mark): Бул корень көрсөткүчтөрдөн (регистерлер, горутин стектери, глобалдык өзгөрмөлөр) жеткиликтүү болгон объекттерди аныктайт. Үч түстүү алгоритм колдонулат (ак — көрүлбөгөн, боз — көрүлгөн, бирок мураскорлору текшерилбеген, кара — көрүлгөн жана бардык мураскорлору текшерилген).
- Жыйноо (Sweep): Жеткиликтүү эмес объекттерди жоготуп, эс тутумду кайра колдонууга бошотот.
Өзгөчөлүктөрү:
- Параллелдүү: Белгилөө колдонуучу коду иштеп жатканда параллелдүү жүргүзүлөт (STW — Stop-The-World фазалары өтө кыска).
- Төмөн кечигүүлөр: Кошулманың иштөө убагын минималдаштыруу үчүн иштелип чыккан.
- Компактсыз эмес: Жаш объекттерди эс тутумда которбойт, бул фрагментацияга алып келиши мүмкүн, бирок ишке ашырууну жөнөкөйлөтөт жана белгилөө/жыйноо ылдамдыгын жогорулатат.
Иш фазаалары:
- Mark жардамчысы: Колдонуучу горутиндер белгилөө фазасында эс тутум бөлүштүрүүдө жардам берет.
- Белгилөө: Жеткиликтүү объекттердин параллелдүү белгилөөсү.
- Белгилөө бүтүшү: Белгилөөнү аяктоо үчүн кыска STW фаза.
- Жыйноо: Жеткиликтүү эмес объекттердин параллелдүү жыйноосу.
Управление:
- Автоматтык.
- Чогултуу триггерлери
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)
}
Артыкчылыктары:
- Эс тутумду автоматтык башкаруу, ката кетүү мүмкүнчүлүгүн азайтат (эстутум агып кетүү, эки эсе бошотуу).
- Конкуренттүү ишке ашырууга ылайыкталган.
Кемчиликтери:
- Нерминирленген иш убактысы.
- Кол менен башкарууга салыштырмалуу эс тутумдун көбөйүшү мүмкүн.