Geheugen vrijmaken

Verwijder alle referenties naar objecten om ervoor te zorgen, dat de afvalophaling wordt gestart.

U kunt de afvalophaling niet rechtstreeks starten in de releaseversie van Flash Player. Verwijder alle referenties naar het object om ervoor te zorgen dat er een afvalophaling wordt gestart wanneer u een object verwijdert. Vergeet niet dat de oude delete-operator die in ActionScript 1.0 en 2.0 wordt gebruikt anders functioneert in ActionScript 3.0. Deze kan alleen worden gebruikt voor verwijdering van de dynamische eigenschappen van een dynamisch object.

Opmerking: U kunt afvalophaling rechtstreeks starten in Adobe® AIR® en in de foutopsporingsversie van Flash Player.

De volgende code stelt een Sprite-referentie bijvoorbeeld in op null.

var mySprite:Sprite = new Sprite(); 
 
// Set the reference to null, so that the garbage collector removes  
// it from memory 
mySprite = null;

Onthoud, dat wanneer een object op null wordt ingesteld, deze niet noodzakelijk uit het geheugen wordt verwijderd. Soms wordt de afvalophaler niet uitgevoerd, bijvoorbeeld als het beschikbare geheugen als niet laag genoeg wordt beschouwd. Afvalophaling is onvoorspelbaar. Afvalophaling wordt geactiveerd door geheugentoewijzing en niet door het verwijderen van objecten. Wanneer de afvalophaling wordt uitgevoerd, vindt deze afbeeldingen van objecten die nog niet zijn opgehaald. Het detecteert inactieve objecten in de afbeeldingen, doordat deze objecten zoekt die naar elkaar verwijzen, maar die niet meer worden gebruikt door de toepassing. Inactieve objecten die op deze manier worden gedetecteerd worden verwijderd.

In grote toepassingen kan dit proces CPU-intensief zijn en kan dit de prestatie beïnvloeden en een merkbare vertraging van de toepassing veroorzaken. Probeer afvalophaling te beperken, door objecten zoveel mogelijk opnieuw te gebruiken. Stel referenties zoveel mogelijk in op null, zodat de afvalophaler minder lang bezig is met het zoeken naar objecten. Beschouw de afvalophaling als een verzekering en beheer de levensduur van objecten indien mogelijk per geval.

Opmerking: Het instellen van een referentie naar een weergaveobject op null garandeert niet dat het object wordt vastgezet. Het object blijft CPU-cycli consumeren totdat de afvalophaling is voltooid. Zorg ervoor dat u het object op de juiste manier deactiveert voordat u de referentie naar het object instelt op null.

De afvalophaler kan gestart worden met behulp van de System.gc()-methode, die beschikbaar is in Adobe AIR en in de foutopsporingsversie van Flash Player. Met de profiler die bij Adobe® Flash® Builder wordt geleverd, kunt u de afvalophaling handmatig opstarten. Als u de afvalophaler start, kunt u zien hoe uw toepassing reageert en of objecten correct uit het geheugen kunnen worden verwijderd.

Opmerking: Als een object als een gebeurtenislistener werd gebruikt, kan een ander object ernaar verwijzen. Als dat het geval is, verwijdert u gebeurtenislisteners die de methode removeEventListener() gebruiken voordat u de referenties instelt op null.

Gelukkig kan het door bitmaps gebruikte geheugen onmiddellijk worden gereduceerd. De BitmapData-klasse bevat bijvoorbeeld een dispose()-methode. Het volgende voorbeeld maakt een BitmapData-instantie van 1.8 MB. Het huidige geheugen in gebruik groeit tot 1,8 MB en de eigenschap System.totalMemory retourneert een kleinere waarde:

trace(System.totalMemory / 1024); 
// output: 43100 
  
// Create a BitmapData instance 
var image:BitmapData = new BitmapData(800, 600); 
 
trace(System.totalMemory / 1024); 
// output: 44964 

Vervolgens wordt de BitmapData handmatig uit het geheugen verwijderd en wordt het geheugengebruik opnieuw gecontroleerd:

trace(System.totalMemory / 1024); 
// output: 43100 
  
// Create a BitmapData instance 
var image:BitmapData = new BitmapData(800, 600); 
 
trace(System.totalMemory / 1024); 
// output: 44964 
 
image.dispose(); 
image = null; 
 
trace(System.totalMemory / 1024); 
// output: 43084 

Hoewel de dispose()-methode de pixels uit het geheugen verwijdert, moet de referentie nog steeds op null worden ingesteld om deze volledig te verwijderen. Roep altijd de dispose()-methode op en stel de referentie in op null, wanneer u geen BitmapData-object meer nodig hebt, zodat er direct geheugen vrijkomt.

Opmerking: Flash Player 10.1 en AIR 1.5.2 introduceren een nieuwe methode, disposeXML(), in de System-klasse. Met deze methode maakt u een XML-object dat meteen beschikbaar is voor afvalophaling door de XML-structuur door te geven als een parameter.