Mis on viidete loendamine?

Võrdlusloendus on arvutiprogrammeerimistehnika, mida kasutatakse mäluhalduse sujuvamaks muutmiseks, võimaldades arvutil kohe teada saada, millal on teatud väärtuse või väärtuste ploki mälust vabastamine “ohutu”. Programmeerimisel on ökonoomsus ülioluline, et programme saaks käivitada võimalikult laial arvutiriistvara valikul. Muutmälu (RAM) on arvuti jaoks oluline, kuid piiratud ressurss. Programmiandmete hoidmine RAM-is on üks kiiremaid viise programmi reageerimisaja parandamiseks, kuid liiga palju süsteemi RAM-i tarbimine muudab programmi ressursiks, mis on lõppkasutaja seisukohast ebasoovitav omadus. Viidete loendus toimib selle tasakaalustamiseks, hoides andmeid RAM-is nii kaua, kui programm seda vajab.

Viiteloenduse tehnika töötab programmis kasutatavate objektide arvu ja nimetuste jälgimise kaudu. Mõelge arvutimälule nagu mänguasjadega täidetud lastetoale ja kõvakettal olevale salvestusruumile nagu toas olevale mänguasjakastile. Viidete loendamine jälgib konkreetseid “mänguasju” (objekte), millega programm (laps) korraga mängib; teisisõnu, objektide arv, mis on praegu “põrandal”. Niipea, kui programm lõpetab konkreetse objektiga mängimise, võtab viidete loendus selle teadmiseks ja saadab objekti tagasi kõvakettale, mitte ei lase sellel jätkata RAM-i ruumi tarbimist.

Mis puutub eelistesse, siis viidete loendamise peamine eelis tuleneb vahetusest. Kohe, kui programm lõpetab objektiga, paneb see selle minema, vabastades ruumi teistele programmi objektidele ja muudele arvutiprogrammidele. Lõppkasutaja seisukohast on see väga puhas lähenemine; programm ei võta kunagi rohkem mälu, kui ta igal konkreetsel ajal vajab.

Selle tehnika negatiivne külg on ökonoomsus. Et viidete loendamine toimiks tõhusalt, peab see kasutama pidevat jälgimisseadet, et hallata korraga kasutatavate objektide arvu. See kulutab väikese osa mälust ja protsessori mahust, suurendades programmi protsessori kulusid. Tulemuseks on see, et otsus kasutada võrdlusloendust muutub tasakaalustavaks toiminguks, mis määrab, kas programmeerija soovib CPU-le või RAM-ile täiendavat pinget eraldada.