Numărarea referințelor

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În calcul, numărarea referințelor este o tehnică de stocare a numărului de referințe, indicii sau mânere către o resursă, cum ar fi un obiect sau un bloc de memorie.

Este de obicei folosit ca o modalitate de a aloca obiecte care nu mai sunt utilizate automat și în siguranță.

Utilizare la colectarea gunoiului

Numărarea referințelor este adesea cunoscută sub numele de algoritm de colectare a gunoiului în care fiecare obiect conține un contor al numărului de referințe deținut de alte obiecte. Dacă contorul de referință al unui obiect ajunge la zero, obiectul devine inaccesibil și este plasat pe lista obiectelor care vor fi distruse.

Numărarea simplă a referințelor necesită actualizarea des. Când o referință este distrusă sau rescrisă, contorul de referință este decrementat, în timp ce atunci când o referință este creată sau copiată, contorul de referință este incrementat.

Numărarea referințelor este, de asemenea, utilizată în operații pe disc sau sisteme de operare distribuite, unde colectarea completă a gunoiului care urmărește referințele într-un grafic sau un arbore este prea împovărătoare din punct de vedere al calculului.

Avantaje și dezavantaje

Avantajele numărării referințelor sunt că este mult mai rapid decât orice alt algoritm de colectare a gunoiului.

Principalul dezavantaj este că trebuie să întrețineți și să gestionați un contor pentru fiecare obiect care este actualizat continuu.

Algoritmul prezintă problema referințelor circulare:

Luați în considerare două obiecte (A și B) care se îndreaptă unul către celălalt.

Atât A cât și B au două referințe:

  • Cel al variabilei care le conține (direct)
  • Cel al obiectului care le indică (indirect)

Când unul dintre cele două obiecte își părăsește scopul, acesta nu mai este accesibil prin intermediul variabilei sale și memoria sa nu poate fi eliberată, deoarece un alt obiect îl face referire (risc de referință suspendată ) în timp ce efectul extern este cel al unei scurgeri de memorie .

Soluția este de a utiliza algoritmi de detectare a ciclului cu adoptarea unor referințe slabe. Referințele circulare sunt marcate în mod explicit ca slabe și nu sunt luate în considerare prin numărarea referințelor.

Interpretare în teoria graficelor

Când luați în considerare schemele de colectare a gunoiului, este adesea util să vă gândiți la graficul de referință , care este un grafic direcționat în care vârfurile sunt obiectele și există o conexiune de la un obiect A la unul B dacă A are o referință la B. Puteți au, de asemenea, vârfuri speciale pentru a reprezenta variabilele locale și referințele blocate de sistemul de rulare și nici o conexiune nu poate ajunge la aceste noduri, deși legăturile către alte noduri pot începe de la aceste noduri.

În acest context, contorul de referință simplu al unui obiect este numărul conexiunilor sale.

Dacă un obiect nu poate fi niciodată distrus în acest tip de grafic, acesta este reprezentat de un nod cu o buclă, adică printr-o legătură către sine.

Deoarece două obiecte sunt legate între ele, este necesar să gestionați un contor pentru fiecare obiect și, dacă unul dintre cele două obiecte iese din sfera sa de acțiune, nu mai este accesibil prin variabila sa și, în plus, memoria sa nu poate fi eliberată, deoarece un alt obiect este referențierea.

Acest lucru dă efect unei scurgeri de memorie (consum excesiv de memorie), pentru a evita acest lucru și, prin urmare, a elibera memoria, trebuie să șterg cele două obiecte legate.