Middle
რა არის ნაგვის შეგროვება და როგორ მუშაობს?
sobes.tech AI
პასუხი AI-სგან
გაყრის შეგროვებელი (Garbage Collector, GC) — ეს არის ავტომატური მეხსიერების მართვის მექანიზმი, რომელიც გამოყოფს და გაათავისუფლებს მეხსიერებას, რომელიც პროგრამამ აღარ გამოიყენება.
მუშაობის პრინციპი:
- მეხსიერების განაწილება: როდესაც პროგრამა ქმნის ობიექტებს, გარბიჯი კოლექტორი მათთვის განაწილებს ადგილს heap-ში.
- ხელმისაწვდომობის განსაზღვრა: გარბიჯი კოლექტორი განსაზღვრავს, რომელი ობიექტები არის ხელმისაწვდომი პროგრამის "ძირებიდან" (root). ძირები შეიძლება იყოს ადგილობრივი ცვლელები მიმდინარე ფუნქციებში, სტატიკური ცვლელები, რგოლებიდან (threads) შემოსული მითითებები და ა.შ.
- მტვრის შეგროვება: ობიექტები, რომლებიც არ არის ხელმისაწვდომი ძირებიდან, ითვლება "მტვრად" და მათი მეხსიერება შეიძლება გათავისუფლდეს.
არსებობს სხვადასხვა ალგორითმები მტვრის შეგროვებისთვის, მაგალითად:
- Mark-and-Sweep (მარკირება და სუფთა): გარბიჯი კოლექტორი გადის ხელმისაწვდომი ობიექტების გრაფს ძირებიდან, მათ მარკირებს. შემდეგ, ის გადის მთელ heap-ს და გაათავისუფლებს მარკირებულ ობიექტებს.
- კოპირება: heap-ი ორ ნაწილად იყოფა. ხელმისაწვდომი ობიექტები იკოპირება ერთ ნაწილიდან მეორეში, ხოლო ძველი ნაწილი იწმინდება.
- პროგრესი: ობიექტები იყოფა თაობებად. ახალი ობიექტები შედიან ახალგაზრდა თაობაში, ძველი — სრულწლოვან. მტვრის შეგროვება ხშირად ხდება ახალგაზრდა თაობაში, რადგან უმეტესობა ობიექტის სიცოცხლის ხანგრძლივობა მოკლეა.
მაგალითი Java-ში (სადავო):
// პროგრამა ქმნის ობიექტებს heap-ში
Object obj1 = new Object();
Object obj2 = new Object();
// obj1 ხდება მიუწვდომელი
obj1 = null;
// გარბიჯი კოლექტორი შეიძლება გაათავისუფლოს obj1-ის დაკავებული მეხსიერება