Liberação de memória

Exclua todas as referências a objetos para certificar-se de que a coleta de lixo seja acionada.

Você não pode iniciar o coletor de lixo diretamente na versão de lançamento do Flash Player. Para certificar-se de que um objeto foi coletado como lixo, exclua todas as referências ao objeto. Lembre-se de que o antigo operador delete utilizado nas versões 1.0 e 2.0 do ActionScript se comportam de maneira diferente no ActionScript 3.0. Ele só pode ser utilizado pra deletar propriedades dinâmicas em um objeto dinâmico.

Nota: Você pode chamar o coletor de lixo diretamente no Adobe® AIR® na versão de depuração do Flash Player.

Por exemplo, o código a seguir defina uma referência a Sprite como null:

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

Lembre-se de que quando um objeto é definido como null, não é necessário removê-lo da memória. Às vezes, o coletor de lixo não é executado, se a memória disponível não for considerada baixa o suficiente. A coleta de lixo não é previsível. Alocação de memória, diferente da exclusão de objeto, aciona o coletor de lixo. Quando o coletor de lixo é executado, ele encontra os gráficos de objetos que ainda não foram coletados. Ele detecta objetos inativos nos gráficos localizando objetos que fazem referência um ao outro, mas que não são mais usados pelo aplicativo. Os objetos inativos detectados dessa forma são excluídos.

Em grandes aplicativos, esse processo pode consumir muita CPU e pode afetar o desempenho e gerar uma redução perceptível da velocidade do aplicativo. Tente limitar as passagens da coleta de lixo reutilizando objetos tanto quanto possível. Além disso, defina as referências como null, quando possível, para que o coletor de lixo gaste menos tempo de processamento localizando os objetos. Pense na coleta de lixo como um seguro e sempre gerencie o tempo de vida dos objetos explicitamente, quando possível.

Nota: Configurar uma referência de um objeto de exibição para nulo não garante que o objeto seja congelado. O objeto continua a consumir ciclos de CPU até que o lixo seja coletado. Certifique-se de desativar corretamente seu objeto antes de definir sua referência para null.

O coletor de lixo pode ser iniciado com o método System.gc(), disponível no Adobe AIR e na versão com depuração do Flash Player. O criador de perfil fornecido com o Adobe® Flash® Builder permite iniciar o coletor de lixo manualmente. Executar o coletor de lixo permite ver como seu aplicativo responde e se os objetos são excluídos corretamente da memória.

Nota: Se um objeto tiver sido usado como um ouvinte de eventos, outro objeto pode fazer referência a ele. Neste caso, remova os ouvintes de evento utilizando o método removeEventListener()antes de definir as referências para null.

Felizmente, a quantidade de memória utilizada por bitmaps pode ser reduzida imediatamente. Por exemplo, a classe BitmapData inclui um método dispose(). O próximo exemplo cria uma instância de BitmapData de 1,8 MB. A memória em uso atual chega até 1,8 MB e a propriedade System.totalMemory retorna um valor menor:

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

Em seguida, o BitmapData é removido manualmente (descartado) da memória e o uso da memória é verificado novamente:

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 

Embora o método dispose() remova os pixels da memória, a referência ainda precisa ser definida como null para que ele seja completamente liberado. Sempre chame o método dispose() e defina a referência como null quando não precisar mais de um objeto BitmapData para que a memória seja liberada imediatamente.

Nota: O Flash Player 10.1 e o AIR 1.5.2 introduz um novo método chamado disposeXML() na classe System. Este método permite que você torne um objeto XML disponível imediatamente para coleta de lixo, ao passar a árvore XML como um parâmetro.