Što je slaba referenca?

Slaba referenca je referenca na objekt u memoriji koja ne sprječava da se objekt očisti rutinama prikupljanja smeća zbog njegove povezanosti s objektom. Ova vrsta reference se obično koristi za uklanjanje curenja memorije kada postoje posebni uvjeti koji sprječavaju normalno prikupljanje smeća. Algoritmi programiranja koji koriste kružnu referencu ili drže vanjske informacije u predmemoriji ili posebnoj strukturi imaju koristi od korištenja slabih referenci. Korištenje slabih referenci u ovakvim situacijama omogućuje čišćenje nekorištenih referentnih objekata i njihovih povezanih slabih referenci.

U računalnom programiranju, jaka referenca se obično stvara prema zadanim postavkama kada se objekt kreira, a memorija koju zauzima objekt ostaje dodijeljena sve dok jaka referenca ostaje održiva. Jaka referenca postaje poništena i memorija pridruženog objekta postaje oslobođena ubrzo nakon što jaka referenca i njezin objekt budu označeni kao da ih program više ne koristi. U određenim situacijama, kao što su programiranje utičnice ili aplikacije za manipulaciju slikama, klase koje se koriste za stvaranje radnih objekata nemaju ugrađeni kapacitet za pohranu dodatnih informacija koje su potrebne za određenu aplikaciju. Dodatni detalji za prolazne objekte kao što su veze ili slike moraju biti pohranjeni u dodatnim objektima predmemorije i povezani s prijelaznim objektima putem referenci. Kada se umjesto jake reference koristi slaba referenca, dodatne informacije nisu vezane referencom i sakupljač smeća ih može ukloniti iz predmemorije nakon što je referentni objekt označen kao neodrživ.

Slabe referentne klase obično su dostupne na jezicima koji su prošireni podsustavima za prikupljanje smeća, uključujući Javu, Python, Perl, C# i .NET framework. Međutim, u C++ programeri su obično odgovorni za čišćenje memorije. Ovaj jezik implementirao je klasu pametnog pokazivača koja pruža neke od istih funkcionalnosti koje pružaju slabe reference i skupljanje smeća, pomažući u smanjenju propuštanja memorije uzrokovanog nepravilnim čišćenjem pokazivača.

Da bi se dodatno olakšalo upravljanje memorijom, jezici s mogućnostima prikupljanja smeća mogu dodatno poboljšati funkcionalnost jezika pružanjem finijih gradijenta referenci osim jake ili slabe reference. Tipovi podataka poput mekih referenci i fantomskih referenci mogu biti uključeni u ove jezike, što omogućuje različite razine obavijesti o ponovnom hvatanju objekata ili oslobađanju. Programeri koji koriste jezike s automatiziranim prikupljanjem smeća trebali bi se upoznati sa svim dostupnim referentnim klasama kako bi poboljšali performanse aplikacije.