Sobes.tech
Middle

Ko tu zini par Dart atkritumu savācēju?

sobes.tech AI

Atbilde no AI

Dart izmanto viengabalas atkritumu savācējs, kas balstās uz paaudžu savākšanu (generational garbage collection).

Galvenās iezīmes:

  • Paaudžu savākšana: objekti tiek sadalīti divās paaudzēs:
    • Jaunā paaudze: jauni, īslaicīgi objekti. Tie tiek bieži savākti.
    • Vecā paaudze: ilgdzīvojoši objekti, kas izdzīvojuši vairākus savākšanas ciklus jaunajā paaudzē. Tie tiek retāk savākti.
  • Apstāties-pasaulē: Lai veiktu atkritumu savākšanu, ir jāaptur programmas izpilde (Dart izolāti). Tomēr, pateicoties viengabalas srauta un optimizācijām, aizkaves ir minimālas.
  • Marķēšanas-un-izdzēšanas: Vecās paaudzes gadījumā tiek izmantots marķēšanas un izdzēšanas algoritms. Vispirms tiek atzīmēti sasniedzamie objekti, pēc tam tiek izdzēsti ne sasniedzamie. Jaunās paaudzes gadījumā tiek izmantots kopējo savākšanas algoritms, kas ātri pārvieto dzīvos objektus uz citu atmiņas vietu.
  • Ciklu neesamība: Izstrādātājam nav jāvada atmiņa vai jāizsauc GC manuāli. Sistēma to dara automātiski.
  • Optimizācijas: ietver funkciju inlining, tipu specializāciju un objektu izvietošanu stekā, kas samazina savākšanas slodzi.

Piemērs, izveidojot jaunu objektu:

// Jauna objekta izveide "jaunajā" atmiņas paaudzē
var myObject = MyClass();

Ja myObject ilgstoši paliek atmiņā un ir pieejams, tas laika gaitā tiks pārvietots uz "vecā" paaudzi. Ja tas vairs nav sasniedzams, savākšanas sistēma to agrāk vai vēlāk atbrīvos.

// myObject tagad nav sasniedzams, to var savākt ar atkritumu savācēju
myObject = null;

Svarīgi saprast, ka Dart atkritumu savācējs ir efektīvs, bet nav panaceja atmiņas noplūdēm, kas var rasties, saglabājot stipras saites uz objektiem, kas vairs nav nepieciešami (piemēram, abonementi, kas nav atcelti).