memory leak
/ˈmem.ər.i liːk/zelfstandig naamwoord
Een memory leak is een softwarefout waarbij een programma geheugen bezet houdt dat het niet meer gebruikt. Daardoor kan het geheugengebruik tijdens het draaien steeds verder oplopen.
Door de memory leak gebruikte de service na enkele dagen zoveel geheugen dat een herstart nodig was.
Een programma reserveert werkgeheugen voor bijvoorbeeld objecten, afbeeldingen en tijdelijke berekeningen. Zodra die gegevens niet meer nodig zijn, hoort dat geheugen weer beschikbaar te komen. Bij een memory leak gebeurt dat niet. Als dezelfde fout zich blijft herhalen, neemt het geheugengebruik toe en kan de software trager worden, vastlopen of door het besturingssysteem worden gestopt.
Waardoor blijft geheugen bezet?
In talen met handmatig geheugenbeheer kan een programma vergeten gereserveerd geheugen vrij te geven. Talen met automatische garbage collection voorkomen dat probleem voor veel objecten, maar sluiten memory leaks niet uit. Een object blijft daar in het geheugen zolang het programma het nog kan bereiken. Een onbedoelde verwijzing vanuit bijvoorbeeld een cache, event listener of globale variabele kan daarom gegevens vasthouden die de applicatie niet meer gebruikt.
Veel geheugengebruik is op zichzelf geen memory leak. Een programma kan bewust veel geheugen nodig hebben en het later weer vrijgeven. Bij een leak blijft geheugen onnodig bezet, vaak na een handeling die vaker wordt uitgevoerd.
Hoe vind je een memory leak?
Woordenboek · In het kortmonitoringMonitoring is het systematisch volgen van software, infrastructuur of processen met meetwaarden en controles. Wijkt een waarde af, dan kan het systeem een waarschuwing geven, zodat een beheerder het probleem kan onderzoeken.Lees meer kan laten zien dat het geheugengebruik over langere tijd blijft stijgen. Om de oorzaak te vinden, vergelijken ontwikkelaars momentopnamen van het geheugen of gebruiken ze een profiler. Daarmee onderzoeken ze welke objecten blijven bestaan en welke verwijzingen ze bereikbaar houden.
De oplossing hangt af van de oorzaak. Soms moet code een event listener verwijderen, een cache begrenzen of een referentie wissen. Daarna controleert een ontwikkelaar onder dezelfde belasting of het geheugengebruik weer stabiliseert.