Sobes.tech
Middle

რა გესმის Dart-ის ნაგვის შეგროვების შესახებ?

sobes.tech AI

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

Dart იყენებს ერთთრაქტიან მტვრის შეგროვებელს, რომელიც დაფუძნებულია თაობის შეგროვებაზე (generational garbage collection).

ძირითადი მახასიათებლები:

  • თაობის შეგროვება: ობიექტები იყოფა ორ თაობად:
    • ახალი თაობა: ახალი, მოკლევადიანი ობიექტები. ხშირად იკრიბება.
    • ძველი თაობა: ხანგრძლივი სიცოცხლის ობიექტები, რომლებიც გადაურჩნენ რამდენიმე შეგროვებას ახალგაზრდა თაობაში. იკრიბება იშვიათად.
  • შეჩერება-დამთავრება-დამთავრება: მტვრის შეგროვების შესრულებისთვის საჭიროა პროგრამის (Dart იზოლატების) შეჩერება. თუმცა, ერთთრაქტიანობის და ოპტიმიზაციების გამო, შეფერხებები მინიმალურია.
  • მარკ-და-გადაფურცვლა: ძველ თაობაში გამოიყენება მარკ-და-გადაფურცვლის ალგორითმი. პირველ რიგში მონიშნულია მისაღწევი ობიექტები, შემდეგ კი ამოიღება მიუწვდომელი. ახალგაზრდა თაობისთვის გამოიყენება კოპირების კოლექტორის ალგორითმი, რომელიც სწრაფად გადაადგილებს ცოცხალ ობიექტებს სხვა მეხსიერების სივრცეში.
  • ციკლების არარსებობა: დეველოპერს არ სჭირდება მეხსიერების მართვა ან GC-ის გამოძახება ხელით. სისტემა ამას ავტომატურად ახორციელებს.
  • ოპტიმიზაციები: მოიცავს ფუნქციების ინლაინინგს, ტიპების სპეციალიზაციას და ობიექტების გამოყოფას სტეკში, რაც ამცირებს მტვრის შეგროვებლის დატვირთვას.

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

// ახალი ობიექტის შექმნა "ახალ" მეხსიერების თაობაში
var myObject = MyClass();

თუ myObject ხანგრძლივად რჩება მეხსიერებაში და ხელმისაწვდომია, ის დროთა განმავლობაში გადაიყვანება "ძველ" თაობაში. თუ ის აღარ იქნება მისაწვდომი, მტვრის შეგროვებელი მას ადრე თუ გვიან გაათავისუფლებს.

// myObject ახლა მიუწვდომელია, შეიძლება გაწმინდოს მტვრის შეგროვებელმა
myObject = null;

მნიშვნელოვანია აღინიშნოს, რომ Dart-ის მტვრის შეგროვებელი ეფექტურია, მაგრამ არ არის სამკურნალო მეხსიერების გაჟონვისგან, რომელიც შეიძლება წარმოიშვას ძლიერი კავშირების შენახვით ობიექტებზე, რომლებიც აღარ არის საჭირო (მაგალითად, გამოწერილობები, რომლებიც არ გაუქმებულა).