Sobes.tech
Junior — Middle

Ինչպես է իրականացվում հիշողության հակադարձ ազատման գործընթացը համակարգում?

sobes.tech AI

Պատասխան AI-ից

Go-ում հիշողության ազատման գործընթացը իրականացվում է ներքին աղբամաք հավաքողի (Garbage Collector) միջոցով: Այն ավտոմատ կերպով հետևում է հիշողության մեջ գտնվող օբյեկտներին, որոնք արդեն չեն օգտագործվում ծրագրի կողմից, և ազատում է դրանք:

Աղբամաք հավաքողի հիմնական փուլերն են.

  1. Նշում (Mark) — հավաքողը անցնում է բոլոր ակտիվ հղումներով և նշում հասանելի օբյեկտները:
  2. Մաքառում (Sweep) — նշված չլինած օբյեկտները համարվում են անօգտագործելի և ազատվում:

Այս գործընթացը տեղի է ունենում ֆոնային ռեժիմում, առանց ծրագրավորողի կողմից ձեռքով հիշողության կառավարում պահանջելու, ինչը նվազեցնում է հիշողության լիքների կամ կրկնակի ազատման սխալների հավանականությունը:

Օրինակ, Go-ում հիշողության օգտագործման օրինակ:

package main

import "fmt"

func main() {
    data := make([]int, 1000000) // հիշողության հատկացում
    fmt.Println(len(data))
    // Ֆունկցիայից դուրս գալուց հետո, data-ն դառնում է անհասանելի և կհամապատասխանեցվի հավաքողի կողմից մաքրմանը
}

Այստեղ, data սլայսի հիշողությունը ավտոմատ կերպով ազատվում է, երբ այլ հղում չի մնացել։