Vad är en svag referens?
En svag referens är en hänvisning till ett objekt i minnet som inte hindrar ett objekt från att rensas upp genom skräpuppsamlingsrutiner på grund av dess associering med objektet. Denna typ av referens används vanligtvis för att eliminera minnesläckor när det finns speciella förhållanden som förhindrar normal skräppost. Programmeringsalgoritmer som använder en cirkulär referens eller innehar främmande information i en cache eller specialstruktur gynnas genom att använda svaga referenser. Användningen av svaga referenser i dessa typer av situationer möjliggör städning av oanvända referensobjekt och deras tillhörande svaga referenser.
Vid datorprogrammering skapas vanligtvis en stark referens som standard när ett objekt skapas, och minnet som är upptaget av objektet förblir tilldelat så länge den starka referensen förblir livskraftig. En stark referens upphävs och dess associerade objekts minne frigörs kort efter en stark referens och dess objekt flaggas som inte längre används av ett program. I vissa situationer, såsom sockelprogrammering eller bildmanipuleringsapplikationer, har klasserna som används för att skapa arbetsobjekt inte den inbyggda kapaciteten att lagra ytterligare information som krävs av en specifik applikation. Ytterligare detaljer för övergående objekt som anslutningar eller bilder måste lagras i kompletterande cache-objekt och kopplas till de övergående objekten genom referenser. När en svag referens används istället för stark referens, är den extra informationen inte bunden av referensen och kan tas bort från cachen av avfallssamlaren när referensobjektet har markerats som icke-livskraftigt.
Svaga referensklasser är normalt tillgängliga på språk som förstärks av delsystem för skräppassning, inklusive Java, Python, Perl, C # och .NET-ramverket. I C ++ är programmerare emellertid vanligtvis ansvariga för att säkerställa minne städas upp. Det här språket har implementerat en smart pekarklass som ger några av samma funktionaliteter som svaga referenser och soporavfall ger, vilket hjälper till att minska läckage från minnet orsakade av felaktig pekarerensning.
För att ytterligare underlätta minnehantering kan språk med avfallsuppsamlingsfaciliteter ytterligare förbättra funktionaliteten på ett språk genom att tillhandahålla finare graderingar av andra referenser än den starka eller svaga referensen. Datatyper som mjuka referenser och fantomreferenser kan inkluderas på dessa språk, vilket möjliggör olika nivåer av objektåterhämtning eller meddelande om återfördelning av objekt. Programmerare som använder språk med automatiserad skräpinsamling bör bekanta sig med alla referensklasser som finns tillgängliga för att förbättra applikationsprestanda.