Frigöra minne

Ta bort alla referenser till ett objekt så att skräpinsamlingen aktiveras.

Du kan inte starta skräpinsamlingen direkt med den släppta versionen av Flash Player. Om du vill vara säker på att ett objekt samlas in ska du ta bort ett alla referenser till objektet. Tänk på att den äldre delete - operatorn som används i ActionScript 1.0 och 2.0 uppträder annorlunda i ActionScript 3.0. Den kan endast användas för att ta bort dynamiska egenskaper i ett dynamiskt objekt.

Obs! Du kan anropa skräpinsamlaren direkt i Adobe® AIR® och i felsökningsversionen av Flash Player.

I exempelvis följande kod anges att en Sprite-referens ska vara null :

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

Tänk på att när ett objekt sätts till null , så behöver detta inte innebära att det tas bort från minnet. Skräpinsamlaren körs ibland inte om det tillgängliga minnet inte är tillräckligt litet. Skräpinsamlingen är inte förutsägbar. Minnestilldelning, inte radering av objekt, utlöser skärpinsamling. När skräpinsamlingen körs kommer objektdiagram som ännu inte samlats in att hittas. Inaktiva objekt i diagram upptäcks genom att objekt som refererar till varandra, och som inte längre används i programmet, hittas. Inaktiva objekt som upptäckts på detta sätt tas bort.

I stora program kan den här bearbetningen kräva mycket minneskapacitet och den kan påverka prestandan och medföra en märkbar försämring i programkörningen. Försök begränsa skräpinsamlingen genom att återanvända objekt så mycket som möjligt. Du kan dessutom ange att referensen ska vara null så att skräpinsamlaren ägnar mindre bearbetningstid åt att söka efter objekten. Se på skräpinsamlingen som en försäkring och hantera alltid objektens livscykler explicit när det är möjligt.

Obs! Att ange en referens till ett visningsobjekt som null garanterar inte att objektet fryses. Objektet fortsätter att förbruka processorcykler tills det skräpsamlas. Se till att du inaktiverar objektet korrekt innan du anger dess referens som null .

Skräpinsamlingen kan startas med metoden System.gc() , som är tillgänglig i Adobe AIR och i felsökningsversionen av Flash Player. Du kan använda profileraren som medföljer Adobe® Flash® Builder för att starta skräpinsamlingen manuellt. När du kör skräpinsamlingen lägger du märke till hur programmet svarar och om objekten tas bort på ett korrekt sätt från minnet.

Obs! Om ett objekt användes som en händelseavlyssnare kan du låta andra objekt referera till det. Om du gör det ska du ta bort händelseavlyssnare som använder metoden removeEventListener() innan du anger att referensen ska vara null .

Dessutom kan mängden minne som används för bitmappar minska omedelbart. I exempelvis klassen BitmapData finns en dispose() -metod. I nästa exempel skapas en BitmapData-instans på 1,8 MB. Det aktuella minnet växer till 1,8 MB och egenskapen System.totalMemory returnerar ett mindre värde:

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

Därefter tas BitmapData bort manuellt från minnet och minnesanvändningen kontrolleras ännu en gång:

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 

Trots att metoden dispose() tar bort pixlarna från minnet, måste referensen ändå anges till null för att den ska frisläppas fulständigt. Anropa alltid metoden dispose() och ange att referensen ska vara null , när du inte längre behöver ett BitmapData-objekt, så att minnet friställs omedelbart.

Obs! I Flash Player 10.1 och AIR 1.5.2 introduceras en ny metod i System-klassen med namnet disposeXML() . Med den här metoden kan du göra ett XML-objekt omedelbart tillgängligt för skräpinsamling, genom att skicka XML-trädet som en parameter.