Mikä on heikko viite?

Heikko viittaus on viittaus muistissa olevaan esineeseen, joka ei estä objektia puhdistamasta jätteenkeräysrutiineilla, koska se liittyy kohteeseen. Tämän tyyppistä viitettä käytetään yleisesti muistivuotojen poistamiseen, kun on olemassa erityisiä olosuhteita, jotka estävät normaalin roskien keräämisen. Ohjelmointialgoritmit, jotka käyttävät pyöreää viitettä tai sisältävät vieraita tietoja välimuistissa tai erityisrakenteessa, hyödyttävät heikkoja viittauksia. Heikkojen viitteiden käyttö tällaisissa tilanteissa mahdollistaa käyttämättömien viiteobjektien ja niihin liittyvien heikkojen viittausten puhdistamisen.

Tietokoneohjelmoinnissa vahva viite luodaan tyypillisesti oletusarvoisesti, kun objekti luodaan, ja objektin käyttämä muisti varataan niin kauan kuin vahva viite pysyy elinkelpoisena. Vahva viittaus mitätöidään ja siihen liittyvän objektin muisti vapautuu pian vahvan viittauksen jälkeen ja sen kohde merkitään siten, että ohjelma ei enää käytä sitä. Tietyissä tilanteissa, kuten pistorasian ohjelmoinnissa tai kuvankäsittelyohjelmissa, työobjektien luomiseen käytettävillä luokilla ei ole sisäänrakennettua kapasiteettia tallentaa tietyn sovelluksen edellyttämää lisätietoa. Ohimenevien objektien, kuten yhteyksien tai kuvien, lisätiedot on tallennettava täydentäviin välimuistiobjekteihin ja linkitettävä ohimeneviin objekteihin viitteiden avulla. Kun heikkoa viitettä käytetään heikon viittauksen sijasta, viittaus ei sido ylimääräisiä tietoja, ja roskankerääjä voi poistaa sen välimuistista, kun viittaava kohde on merkitty elinkelvottomaksi.

Heikot viiteluokat ovat yleensä saatavilla kielillä, joita täydentävät roskien keräysalijärjestelmät, kuten Java, Python, Perl, C#ja .NET -kehys. C ++: ssa ohjelmoijat ovat kuitenkin yleensä vastuussa muistin puhdistamisesta. Tällä kielellä on otettu käyttöön älykäs osoitinluokka, joka tarjoaa joitain samoja toimintoja kuin heikot viitteet ja roskien kerääminen, mikä auttaa vähentämään väärän osoittimen puhdistamisen aiheuttamia muistivuotoja.

Muistinhallinnan helpottamiseksi jätteiden keräysmahdollisuudella varustetut kielet voivat lisäksi parantaa kielen toimivuutta tarjoamalla muita viitteitä kuin vahvoja tai heikkoja viittauksia. Näillä kielillä voidaan sisällyttää tietotyyppejä, kuten pehmeitä viittauksia ja fantomiviittauksia, mikä mahdollistaa eri tasoisten objektien valtaamisen tai siirtoilmoituksen. Ohjelmoijien, jotka käyttävät kieliä automaattisella roskien keräämisellä, tulisi tutustua kaikkiin saatavilla oleviin viiteluokkiin sovellusten suorituskyvyn parantamiseksi.