Vad är en svag referens?

En svag referens är en referens till ett objekt i minnet som inte hindrar ett objekt från att städas upp av sopsamlingsrutiner på grund av dess associering med objektet. Den här typen av referenser används ofta för att eliminera minnesläckor när speciella förhållanden råder som förhindrar att normal sophämtning sker. Programmeringsalgoritmer som använder en cirkulär referens eller innehåller ovidkommande information i en cache eller speciell struktur gynnas av att använda svaga referenser. Användningen av svaga referenser i dessa typer av situationer möjliggör sanering av oanvända referensobjekt och deras tillhörande svaga referenser.

I datorprogrammering skapas en stark referens vanligtvis som standard när ett objekt skapas, och minnet som upptas av objektet förblir allokerat så länge som den starka referensen förblir livskraftig. En stark referens blir ogiltig 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, som socketprogrammering 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 transienta objekt som anslutningar eller bilder måste lagras i kompletterande cacheobjekt och länkas till de transienta 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 sopsamlaren när referensobjektet har markerats som icke-livskraftigt.

Svaga referensklasser är normalt tillgängliga på språk som utökas med undersystem för skräpinsamling, inklusive Java, Python, Perl, C# och .NET-ramverket. I C++ är dock programmerare vanligtvis ansvariga för att se till att minnet städas upp. Det här språket har implementerat en smart pekarklass som ger några av samma funktioner som svaga referenser och skräpinsamling ger, vilket hjälper till att minska minnesläckor orsakade av felaktig rensning av pekaren.

För att ytterligare underlätta minneshantering kan språk med skräpinsamlingsmöjligheter ytterligare förbättra ett språks funktionalitet genom att tillhandahålla finare gradienter av andra referenser än den starka eller svaga referensen. Datatyper som mjuka referenser och fantomreferenser kan inkluderas i dessa språk, vilket möjliggör varierande nivåer av objektåtertagning eller aviseringsmeddelande. Programmerare som använder språk med automatisk sophämtning bör bekanta sig med alla referensklasser som är tillgängliga för att förbättra applikationens prestanda.