Mis on nõrk viide?

Nõrk viide on viide mälus olevale objektile, mis ei takista objekti puhastamist prügikoristusrutiinide abil, kuna see on seotud objektiga. Seda tüüpi viiteid kasutatakse tavaliselt mälulekke kõrvaldamiseks, kui eksisteerivad eritingimused, mis takistavad tavalist prügikoristust. Programmeerimisalgoritmid, mis kasutavad ringikujulist viidet või hoiavad vahemälus kõrvalist teavet või eristruktuuri, saavad kasu nõrkade viidete kasutamisest. Nõrkade viidete kasutamine seda tüüpi olukordades võimaldab puhastada kasutamata viiteobjekte ja nendega seotud nõrku viiteid.

Arvutiprogrammeerimises luuakse tavaliselt objekti loomisel vaikimisi tugev viide ja objekti poolt hõivatud mälu jääb eraldatuks seni, kuni tugev viide on elujõuline. Tugev viide tühistatakse ja sellega seotud objekti mälu vabaneb varsti pärast tugevat viidet ja selle objekt märgitakse, et programm seda enam ei kasuta. Teatud olukordades, nagu pistikupesade programmeerimine või pilditöötlusrakendused, ei ole tööobjektide loomiseks kasutatavatel klassidel sisseehitatud võimsust, et salvestada lisateavet, mis on konkreetse rakenduse jaoks vajalik. Täiendavad üksikasjad mööduvate objektide (nt ühendused või pildid) kohta tuleb salvestada täiendavatesse vahemäluobjektidesse ja siduda ajutiste objektidega viidetega. Kui tugeva viite asemel kasutatakse nõrka viidet, ei ole lisateave viitega seotud ja prügikoguja võib selle vahemälust eemaldada, kui viiteobjekt on elujõuliseks märgitud.

Nõrgad viiteklassid on tavaliselt saadaval keeltes, mida täiendavad prügikogumise alamsüsteemid, sealhulgas Java, Python, Perl, C# ja .NET-raamistik. Kuid C++ puhul vastutavad programmeerijad tavaliselt mälu puhastamise eest. See keel on juurutanud nutika osutiklassi, mis pakub mõningaid samu funktsioone, mida pakuvad nõrgad viited ja prügikogumine, aidates vähendada kursori valest puhastamisest põhjustatud mälulekkeid.

Mäluhalduse edasiseks hõlbustamiseks võivad prügikogumisvõimalustega keeled keele funktsionaalsust täiendavalt täiustada, pakkudes peale tugeva või nõrga viide peenemaid viidete gradiente. Need keeled võivad sisaldada andmetüüpe, nagu pehmed viited ja fantoomviited, mis võimaldab objektide taashõive või eraldamise teatise erineva tasemega. Programmeerijad, kes kasutavad automaatse prügikorjamisega keeli, peaksid rakenduse jõudluse parandamiseks tutvuma kõigi saadaolevate võrdlusklassidega.