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-ს მეხსიერება ავტომატურად გათავისუფლდება, როდესაც მასზე აღარ იქნება მითითებები.