Hva er en svak referanse?
En svak referanse er en henvisning til et objekt i minnet som ikke forhindrer at et objekt blir renset opp av søppelinnsamlingsrutiner på grunn av dets tilknytning til objektet. Denne typen referanser brukes ofte for å eliminere lekkasjer i minnet når det eksisterer spesielle forhold som forhindrer normal søppelinnsamling. Programmeringsalgoritmer som bruker en sirkulær referanse eller inneholder ekstern informasjon i en cache eller spesiell struktur, drar nytte av å bruke svake referanser. Bruken av svake referanser i denne typen situasjoner muliggjør opprydding av ubrukte referentobjekter og tilhørende svake referanser.
Ved programmering av datamaskiner opprettes vanligvis en sterk referanse som standard når et objekt opprettes, og minnet som er opptatt av objektet forblir tildelt så lenge den sterke referansen forblir levedyktig. En sterk referanse blir ugyldig og det tilknyttede objektets minne frigjøres kort etter en sterk referanse, og objektet blir flagget som ikke lenger brukes av et program. I visse situasjoner, for eksempel sokelprogrammering eller bildemanipuleringsapplikasjoner, har klassene som brukes til å lage arbeidsobjekter ikke den innebygde kapasiteten til å lagre tilleggsinformasjon som er nødvendig av en spesifikk applikasjon. Tilleggsdetaljene for forbigående objekter, som tilkoblinger eller bilder, må lagres i tilleggsbufferobjekter og kobles til de forbigående objekter ved referanser. Når en svak referanse brukes i stedet for sterk referanse, er den ekstra informasjonen ikke bundet av referansen og kan fjernes fra cachen av søppelsamleren når referentobjektet er merket som ikke levedyktig.
Svake referanseklasser er vanligvis tilgjengelige på språk som er forsterket av søppelsamlingssystemer, inkludert Java, Python, Perl, C # og .NET-rammeverket. I C ++ er imidlertid programmerere vanligvis ansvarlige for å sikre opprydding av minnet. Dette språket har implementert en smart pekerklasse som gir noen av de samme funksjonalitetene som svake referanser og søppelinnsamling gir, og hjelper til med å redusere lekkasjer fra minne forårsaket av feil pekeropprydding.
For ytterligere å forenkle minnestyring, kan språk med innsamlingsanlegg for søppel i tillegg forbedre funksjonaliteten til et språk ved å tilby finere graderinger av andre referanser enn den sterke eller svake referansen. Datatyper som myke referanser og fantomreferanser kan være inkludert i disse språkene, noe som gjør det mulig å variere nivåer av gjenoppretting av gjenstander eller varsling av avtale. Programmerere som bruker språk med automatisk søppelinnsamling, bør sette seg inn i alle referanseklassene som er tilgjengelige for å forbedre applikasjonsytelsen.