Wat is een zwakke referentie?
Een zwakke verwijzing is een verwijzing naar een object in het geheugen dat niet verhindert dat een object wordt opgeruimd door afvalverzamelroutines vanwege de associatie met het object. Dit type referentie wordt vaak gebruikt om geheugenlekken te helpen elimineren wanneer er speciale omstandigheden zijn die normale vuilophaling voorkomen. Programmeeralgoritmen die een circulaire referentie gebruiken of vreemde informatie in een cache of speciale structuur opslaan, door zwakke referenties te gebruiken. Het gebruik van zwakke referenties in dit soort situaties zorgt voor het opruimen van ongebruikte referentieobjecten en hun bijbehorende zwakke referenties.
Bij computerprogrammering wordt standaard standaard een sterke referentie gemaakt wanneer een object wordt gemaakt, en het geheugen dat door het object wordt ingenomen, blijft toegewezen zolang de sterke referentie levensvatbaar blijft. Een sterke referentie wordt tenietgedaan en het bijbehorende geheugen van het bijbehorende object wordt vrijgegeven kort na een sterke referentie en het object wordt gemarkeerd als niet langer gebruikt door een programma. In bepaalde situaties, zoals socketprogrammering of beeldmanipulatietoepassingen, hebben de klassen die worden gebruikt om werkobjecten te maken niet de ingebouwde capaciteit om extra informatie op te slaan die nodig is voor een specifieke toepassing. De aanvullende details voor tijdelijke objecten zoals verbindingen of afbeeldingen moeten worden opgeslagen in aanvullende cache-objecten en door middel van verwijzingen aan de tijdelijke objecten worden gekoppeld. Wanneer een zwakke referentie wordt gebruikt in plaats van sterke referentie, is de extra informatie niet gebonden aan de referentie en kan deze door de afvalverzamelaar uit de cache worden verwijderd zodra het referentobject als niet-levensvatbaar is gemarkeerd.
Zwakke referentieklassen zijn normaal gesproken beschikbaar in talen die worden aangevuld met subsystemen voor garbage collection, waaronder Java, Python, Perl, C # en het .NET-framework. In C ++ zijn programmeurs meestal echter verantwoordelijk voor het opschonen van het geheugen. Deze taal heeft een slimme pointerklasse geïmplementeerd die een aantal van dezelfde functionaliteiten biedt die zwakke referenties en vuilnisophaling bieden, waardoor geheugenlekken worden verminderd die worden veroorzaakt door onjuiste pointeropruiming.
Om geheugenbeheer verder te vergemakkelijken, kunnen talen met voorzieningen voor het verzamelen van afval bovendien de functionaliteit van een taal verbeteren door fijnere gradiënten van referenties te bieden dan de sterke of zwakke referentie. Gegevenstypen zoals zachte verwijzingen en fantoomreferenties kunnen in deze talen worden opgenomen, waardoor verschillende niveaus van objectherhaling of kennisgeving van deallocatie mogelijk zijn. Programmeurs die talen gebruiken met geautomatiseerde afvalinzameling moeten zich vertrouwd maken met alle referentieklassen die beschikbaar zijn om de prestaties van de applicatie te verbeteren.