Sobes.tech
Middle

Ką žinai apie šiukšlių surinkėją Dart?

sobes.tech AI

Atsakymas iš AI

Dart naudoja viengubo srauto šiukšlių surinkėją, pagrįstą kartų surinkimu (generational garbage collection).

Pagrindinės savybės:

  • Kartų surinkimas: objektai skirstomi į dvi kartas:
    • Jaunimo karta: nauji, trumpalaikiai objektai. Dažnai surenkami.
    • Senjorų karta: ilgalaikiai objektai, kurie išgyveno keletą surinkimų jaunimo kartoje. Rečiau surenkami.
  • Sustabdyti-pasaulis: Norint atlikti šiukšlių surinkimą, reikia sustabdyti programos vykdymą (Dart izoliatorius). Tačiau, dėka viengubo srauto ir optimizacijų, vėlavimai yra minimalūs.
  • Žymėjimo-ir-ištrynimo: Senjorų kartoje naudojama žymėjimo ir ištrynimo algoritmas. Pirmiausia pažymimi pasiekiami objektai, tada ištrinami nepasiekiami. Jaunimo kartai naudojamas kopijavimo surinkimo algoritmas, kuris greitai perkelia gyvus objektus į kitą atminties sritį.
  • Ciklo nebuvimas: Kūrėjui nereikia rankiniu būdu valdyti atminties ar kviesti GC. Sistema tai daro automatiškai.
  • Optimizacijos: apima funkcijų įterpimą, tipų specializaciją ir objektų išskyrimą į steką, kas sumažina šiukšlių surinkėjo apkrovą.

Pavyzdžiui, kuriant naują objektą:

// Naujo objekto kūrimas "jaunoje" atminties kartoje
var myObject = MyClass();

Jei myObject ilgą laiką lieka atmintyje ir yra pasiekiamas, jis laikui bėgant bus perkeliamas į "senjorų" kartą. Jei jis taps nepasiekiamas, šiukšlių surinkėjas jį greičiausiai išlaisvins.

// myObject dabar nepasiekiamas, gali būti surinktas šiukšlių surinkėjo
myObject = null;

Svarbu suprasti, kad Dart šiukšlių surinkėjas yra efektyvus, bet nėra panacėja nuo atminties nutekėjimo, kuris gali atsirasti dėl stiprių nuorodų į objektus, kurie daugiau nereikalingi (pavyzdžiui, prenumeratos, kurios nebuvo atšauktos).