Middle+
Խոսիր Go լեզվի աղբահանության հավաքողի մասին։
sobes.tech AI
Պատասխան AI-ից
Go օգտագործում է պառլելային, երեքգույն, ոչ կոմպակտագնող աղբահավաքիչ, որը ունի ցածր ուշացում:
Հիմնական աշխատանքային սկզբունքները:
- Նշում (Mark): Կարգավորում է, թե որոնք օբյեկտները հասանելի են ռուտային ցուցիչներից (ռեգիստրներ, գորուտների stack-ներ, գլոբալ փոփոխականներ): Օգտագործվում է երեքգույն ալգորիթմ (սպիտակ - չայցելված, գորշ - այցելված, բայց ժառանգները դեռ չստուգված, սև - այցելված և բոլոր ժառանգները ստուգված):
- Աղբահավաք (Sweep): Հեռացնում է հասանելի olmayan օբյեկտները (մնում են սպիտակ) և ազատում հիշողությունը կրկնակի օգտագործման համար:
Նշված առանձնահատկությունները:
- Պառլելային: Նշումը կատարվում է օգտվողի կոդի կատարման հետ միասին (STW - Stop-The-World փուլերը շատ կարճ են):
- Նվազեցված ուշացում: Դիզայն է, որպեսզի նվազեցնի ընդհատումները ծրագրի աշխատանքի ժամանակ:
- Ոչ կոմպակտ: Չփոխում է կենդանի օբյեկտները հիշողության մեջ, ինչը կարող է հանգեցնել ֆրագմենտացիայի, բայց պարզեցնում է իրականացմանը և արագացնում նշումը/աղբահավաքը:
Աշխատանքային փուլերը:
- Նշում օգնական: Օգտվողի գորուտինները օգնում են հավաքիչին նշման փուլում հիշողության բաժանման ժամանակ:
- Նշում: Պառլելային նշում հասանելի օբյեկտների:
- Նշման ավարտ: Կարճ STW փուլ՝ նշման ավարտին հասցնելու համար:
- Աղբահավաք: Պառլելային անջատում հասանելի olmayan օբյեկտների:
Կառավարում:
- Ավտոմատ:
- Աղբահավաքի շեմերը կարգավորվում են
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)
}
Առավելությունները:
- Ավտոմատ հիշողության կառավարում, նվազեցնում է սխալների հավանականությունը (հիշողության արտահոսք, կրկնակի ազատում):
- Դիզայն է՝ մրցակցային կատարման համար:
Անբավարարությունները:
- Անորոշ ժամանակով աշխատող GC:
- Հնարավոր է հիշողության սպառման ավելացում՝ ձեռքով կառավարման համեմատ: