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.