‫We komen terug en dit ben jij.
‫Ik wil het hebben over de vuilnisman en hoe zij voor het geheugen zorgt.
‫Dus de garbage collection is een tool die beschikbaar is en meerdere programmeertalen.
‫En in sommige daarvan wordt het handmatig gedaan.
‫In andere gebeurt het automatisch.
‫En het dot net framework zorgt voor automatisch geheugenbeheer, wat betekent dat je de
‫garbage collector niet handmatig hoeft te gebruiken zoals in alle programmeertalen.
‫Dus programmeertalen zoals C of C++ en andere, ze hebben een handmatige garbagecollection die je zo nu en dan moet uitvoeren
‫en je moet weten wanneer je het moet uitvoeren.
‫Dat is dus iets dat automatisch gebeurt.
‫Intershop daarom is het dat niet.
‫Ja, veel mensen gebruiken het heel vaak.
‫Dus als je eenmaal complexere programma's hebt en echt geavanceerd, dan zul je het zo nu en dan gaan gebruiken.
‫Maar echt, het is niet iets dat je de hele tijd moet gebruiken of in de meeste gevallen zelfs
‫helemaal niet.
‫Daarom is het bij wijze van spreken geen belangrijk onderwerp.
‫Oke.
‫Dus laten we zeggen dat we een object hebben dat Dennis heet en dat het van het type mens is.
‫Dus ik heb een klasse gemaakt die mens wordt genoemd, en er zijn meerdere verschillende eigenschappen, enzovoort.
‫Dus uiteindelijk creëer ik gewoon een object van het type mens.
‫En dat heet Dennis.
‫En door dit te doen, door dit nieuwe sleutelwoord te gebruiken, heb ik geheugen nodig omdat het een object in mijn geheugen creëert.
‫Dus wijst geheugen voor ons toe.
‫En het framework zorgt voor het terugwinnen van geheugen voor gebruik in het systeem zodra objecten niet langer worden
‫gebruikt.
‫Dus in dit geval maak ik dit object en dan zou ik het kunnen gebruiken en ik zou het opnieuw en opnieuw kunnen gebruiken.
‫Maar op een gegeven moment ga ik het niet meer gebruiken en misschien schrap ik zelfs de verwijzingen ernaar.
‫En dan, ja, de vuilnisman zal het opruimen omdat dit geheugen nu geblokkeerd is en de
‫vuilnisman moet opruimen.
‫Het moet dit geheugen dus weer beschikbaar maken voor bijvoorbeeld andere objecten.
‫Laten we het nu vanuit een visueel perspectief bekijken, dus we hebben deze systeemgeheugenpool
‫aan de linkerkant en ons programma aan de rechterkant en de systeemgeheugenpool heeft een heleboel geheugen.
‫We kunnen dit geheugen dus voor meerdere verschillende programma's gebruiken.
‫Maar nu hebben we ons programma waarmee het wordt uitgevoerd.
‫Nu maken we in ons programma een object.
‫Nu hebben we plotseling een beetje ruimte in ons geheugen nodig.
‫Oke.
‫Er is dus een verwijzing van ons programma naar dat geheugen waar ons object is opgeslagen.
‫Oke.
‫Er is dus een directe verwijzing en we kunnen het hergebruiken en we kunnen het vanaf verschillende plaatsen oproepen, enzovoort.
‫Oke.
‫En dan hebben we er nog een en nog een.
‫We hebben dus meerdere verschillende objecten die we hebben gemaakt en elke keer zullen we het nieuwe object maken.
‫Er is een geheugen toegewezen in de geheugenpool en er is een verwijzing van ons programma naar dat geheugen.
‫Deze referenties zijn er dus.
‫Er is dus een verwijzing van ons programma naar de geheugenpool.
‫Nu kan op een gegeven moment de verwijzing worden verwijderd.
‫Dus we kunnen de verwijzing misschien verwijderen door nu een variabele in te stellen of door het object null en vervolgens de verwijzing in te
‫stellen op plotseling verdwenen.
‫Nu is er geen verwijzing meer van ons programma naar deze kleine geheugenplaats hier.
‫Dus onze vuilnisman merkt het op en zegt: OK, er is geen verwijzing.
‫Dit kleine stukje geheugen wordt dus nooit gebruikt.
‫Dus laten we het gewoon opruimen of eens kijken, ik heb gelokaliseerd of laten we gewoon vrijmaken voor een andere locatie en dat is wat er
‫dan gebeurt.
‫Laten we nu eens kijken naar een voorbeeld van wanneer de vuilnisophaler zou beginnen, en ik heb hier een functie die
‫mijn functie heet en ik maak hier een object.
‫Nogmaals, het heet Dennis.
‫En dan noemt Dennis zijn methoden of wij noemen zijn methode, zoals lesgeven.
‫Dan stellen we zijn leeftijd vast en dan noemen we een andere methode, ouder worden enzovoort.
‫Maar op een gegeven moment is dit dunnies-object in het geheugen niet meer nodig omdat de functieaanroep voorbij
‫is.
‫Dus de functie eindigt, het object.
‫Dennis valt buiten het bereik en er zijn geen verwijzingen meer naar Dennis omdat mijn functie een functie is en
‫we hebben dit object dat zich binnen een functie bevindt.
‫Dus de reikwijdte ervan valt binnen de functie.
‫Dus als de functieaanroep eenmaal voorbij is, is er geen directe verwijzing meer naar omdat we niet kunnen verwijzen naar
‫een object dat zich binnen een functie bevindt van buiten deze functie.
‫Rechts.
‫Dus we zouden daarvoor velden moeten maken of andere benaderingen hiervoor moeten gebruiken.
‫Maar uiteindelijk is de vuilnisman, die dit dan opruimt, en dit geheugen opnieuw toewijst.
‫En het algemene idee hier is eigenlijk dat dit slechts een eenvoudig voorbeeld is.
‫Er zijn tal van andere situaties waarin de vuilnisman zou ingrijpen, maar dit is iets dat we
‫al hebben gebruikt.
‫Dus de concepten die je hier kunt zien, hebben we al gezien in andere video's of lezingen van deze
‫cursus.
‫Daarom heb ik dit voorbeeld gekozen.
‫Dus wat moet je weten over het ophalen van huisvuil?
‫Welnu, u hoeft de vuilnisman niet handmatig te bellen, maar u kunt het wel handmatig doen.
‫De vuilnisman heeft verwerkingskracht nodig.
‫Dus het staat op een apart draadje en het is erg licht van gewicht.
‫Maar toch is enige verwerkingskracht vereist.
‫Het doel van de afvalverzamelaar is om geheugen vrij te maken, maar niet te veel verwerkingskracht te gebruiken.
‫Het zal dus over het algemeen niet veel verwerkingskracht nodig hebben, maar het zal niet de hele tijd aangeroepen worden of
‫de vuilnisman zal niet de hele tijd draaien om geheugen vrij te maken.
‫Het gaat gewoon draaien wanneer het nodig is of wanneer het nodig acht dingen die het nodig is.
‫Dus dat is echt het lastige hier.
‫Het geheugen wordt niet per se meteen teruggewonnen.
‫Het kan even duren voordat de vuilnisman, zelfs als je hem handmatig aanroept, niet meteen hoeft
‫te rennen.
‫Dit zijn dus enkele lastige dingen over de garbage collector die u kunt implementeren om een methode te voltooien om
‫code uit te voeren net voordat een object door de garbage collector uit het geheugen wordt vrijgegeven.
‫Dit betekent dat als u besluit een specifieke code uit te voeren net voordat een object wordt opgeschoond, dus net voordat de
‫vuilnisman het opruimt.
‫Dus als er bijvoorbeeld geen verwijzingen meer naar zijn, kun je de final lizer-methode binnen deze klasse gebruiken
‫om de specifieke functionaliteit te implementeren die je wilt dat ze draaien.
‫Misschien wil je zelf dingen opruimen net voordat de vuilnisman binnenkomt en je object
‫opruimt of naar het geheugen verhuist of dit object uit het geheugen vrijgeeft.
‫Oke.
‫Wanneer draait de vuilnisophaaldienst?
‫Welnu, wanneer het systeem een beetje fysiek geheugen heeft, wanneer het toegewezen geheugen de
‫vooraf ingestelde drempel overschrijdt, wanneer de vuilnisophaal- of verzamelmethode wordt aangeroepen, ook al is dit een super lastige
‫methode.
‫Dus dit is iets dat is.
‫Ja, heel specifiek.
‫Heel speciaal.
‫Als je er meer over wilt weten, moet je de documentatie over de garbage collector bekijken.
‫Maar de collect-methode wordt niet altijd meteen aangeroepen en ruimt ook niet direct alles op.
‫Het is meer alsof je de tool een suggestie geeft.
‫Dus je zegt, oké, vuilnisman.
‫Persoonlijk denk ik dat dat een goed punt of een goede plek zou zijn om het afval te verzamelen, maar in sommige gevallen
‫accepteert het het misschien niet of doet het het misschien later of iets dergelijks.
‫Misschien heeft het gewoon vuilnis opgehaald en besluit het dat het niet nodig is of zoiets.
‫Het is dus een heel lastige.
‫Wil je er meer over weten, bekijk dan de documentatie.
‫Maar ik denk dat dit een goed uitgangspunt is om te begrijpen wat de vuilnisman doet.
‫En zoals ik al zei, in de meeste gevallen heb je het niet nodig omdat we tegenwoordig zoveel geheugen hebben en dat als je
‫geen enorme geheugenlekken in je programma's hebt, je deze problemen nooit zou moeten tegenkomen.