Sobes.tech
Middle

რა არის ნაგვის შეგროვება და როგორ მუშაობს?

sobes.tech AI

პასუხი AI-სგან

გაყრის შეგროვებელი (Garbage Collector, GC) — ეს არის ავტომატური მეხსიერების მართვის მექანიზმი, რომელიც გამოყოფს და გაათავისუფლებს მეხსიერებას, რომელიც პროგრამამ აღარ გამოიყენება.

მუშაობის პრინციპი:

  1. მეხსიერების განაწილება: როდესაც პროგრამა ქმნის ობიექტებს, გარბიჯი კოლექტორი მათთვის განაწილებს ადგილს heap-ში.
  2. ხელმისაწვდომობის განსაზღვრა: გარბიჯი კოლექტორი განსაზღვრავს, რომელი ობიექტები არის ხელმისაწვდომი პროგრამის "ძირებიდან" (root). ძირები შეიძლება იყოს ადგილობრივი ცვლელები მიმდინარე ფუნქციებში, სტატიკური ცვლელები, რგოლებიდან (threads) შემოსული მითითებები და ა.შ.
  3. მტვრის შეგროვება: ობიექტები, რომლებიც არ არის ხელმისაწვდომი ძირებიდან, ითვლება "მტვრად" და მათი მეხსიერება შეიძლება გათავისუფლდეს.

არსებობს სხვადასხვა ალგორითმები მტვრის შეგროვებისთვის, მაგალითად:

  • Mark-and-Sweep (მარკირება და სუფთა): გარბიჯი კოლექტორი გადის ხელმისაწვდომი ობიექტების გრაფს ძირებიდან, მათ მარკირებს. შემდეგ, ის გადის მთელ heap-ს და გაათავისუფლებს მარკირებულ ობიექტებს.
  • კოპირება: heap-ი ორ ნაწილად იყოფა. ხელმისაწვდომი ობიექტები იკოპირება ერთ ნაწილიდან მეორეში, ხოლო ძველი ნაწილი იწმინდება.
  • პროგრესი: ობიექტები იყოფა თაობებად. ახალი ობიექტები შედიან ახალგაზრდა თაობაში, ძველი — სრულწლოვან. მტვრის შეგროვება ხშირად ხდება ახალგაზრდა თაობაში, რადგან უმეტესობა ობიექტის სიცოცხლის ხანგრძლივობა მოკლეა.

მაგალითი Java-ში (სადავო):

// პროგრამა ქმნის ობიექტებს heap-ში
Object obj1 = new Object();
Object obj2 = new Object();

// obj1 ხდება მიუწვდომელი
obj1 = null;

// გარბიჯი კოლექტორი შეიძლება გაათავისუფლოს obj1-ის დაკავებული მეხსიერება