Junior — Middle
Ինչպես է իրականացվում հիշողության հակադարձ ազատման գործընթացը համակարգում?
sobes.tech AI
Պատասխան AI-ից
Go-ում հիշողության ազատման գործընթացը իրականացվում է ներքին աղբամաք հավաքողի (Garbage Collector) միջոցով: Այն ավտոմատ կերպով հետևում է հիշողության մեջ գտնվող օբյեկտներին, որոնք արդեն չեն օգտագործվում ծրագրի կողմից, և ազատում է դրանք:
Աղբամաք հավաքողի հիմնական փուլերն են.
- Նշում (Mark) — հավաքողը անցնում է բոլոր ակտիվ հղումներով և նշում հասանելի օբյեկտները:
- Մաքառում (Sweep) — նշված չլինած օբյեկտները համարվում են անօգտագործելի և ազատվում:
Այս գործընթացը տեղի է ունենում ֆոնային ռեժիմում, առանց ծրագրավորողի կողմից ձեռքով հիշողության կառավարում պահանջելու, ինչը նվազեցնում է հիշողության լիքների կամ կրկնակի ազատման սխալների հավանականությունը:
Օրինակ, Go-ում հիշողության օգտագործման օրինակ:
package main
import "fmt"
func main() {
data := make([]int, 1000000) // հիշողության հատկացում
fmt.Println(len(data))
// Ֆունկցիայից դուրս գալուց հետո, data-ն դառնում է անհասանելի և կհամապատասխանեցվի հավաքողի կողմից մաքրմանը
}
Այստեղ, data սլայսի հիշողությունը ավտոմատ կերպով ազատվում է, երբ այլ հղում չի մնացել։