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).