Belleği boşaltmak

Çöp toplamanın tetiklenmesini sağlamak için nesnelere olan tüm başvuruları silin.

Flash Player’ın yayınlama sürümünde çöp toplayıcıyı doğrudan başlatamazsınız. Bir nesnenin çöp olarak toplandığından emin olmak için, nesneye yapılan tüm başvuruları silin. ActionScript 1.0 ve 2.0’da kullanılan eski delete operatörünün ActionScript 3.0’da farklı davrandığını unutmayın. Operatör yalnızca dinamik nesnelerin dinamik özelliklerini silmek için kullanılabilir.

Not: Adobe® AIR® uygulamasında ve Flash Player’ın hata ayıklayıcı sürümünde çöp toplayıcısını doğrudan çağırabilirsiniz.

Örneğin, aşağıdaki kod bir Sprite başvurusunu null değerine ayarlar:

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

Şunu unutmayın ki, bir nesnenin null değerine ayarlanması bellekten kaldırılacağı anlamına gelmez. Bazen kullanılabilir bellek yeterince düşük sayılmıyorsa çöp toplayıcı çalışmaz. Çöp toplama tahmin edilemez. Nesne silme yerine bellek ayırma işlemi çöp toplamayı tetikler. Çöp toplayıcı çalıştığında, henüz toplanmamış nesne grafikleri bulur. Grafiklerde birbirine başvuran nesneleri bularak etkin olmayan ancak uygulamanın artık kullanmadığı nesneleri algılar. Bu şekilde algılanan etkin olmayan nesneler silinir.

Büyük uygulamalarda, bu işlem yoğun CPU kullanımına neden olabilir, performansı etkileyebilir ve uygulamada fark edilir bir yavaşlama meydana getirebilir. Mümkün olduğunca nesneleri yeniden kullanarak çöp toplamayı kısıtlamayı deneyin. Ayrıca, mümkün olduğunda, başvuruları null olarak ayarlayın, böylece çöp toplayıcı, nesneleri bulmak için daha az işleme zamanı harcar. Çöp toplama işlemini garanti sağlayan bir işlem olarak göz önünde bulundurun ve mümkünse her zaman nesne ömürlerini açık bir şekilde yönetin.

Not: Bir görüntüleme nesnesine yapılan başvurunun null olarak ayarlanması, nesnenin donduğunu garantilemez. Nesne, çöp olarak toplanana kadar CPU döngülerini kullanmaya devam eder. Başvurusunu null olarak ayarlamadan önce nesnenizi düzgün şekilde devre dışı bıraktığınızdan emin olun.

Çöp toplayıcı Adobe AIR’de ve Flash Player’ın hata ayıklayıcı sürümünde mevcut olan System.gc() yöntemi kullanılarak başlatılabilir. Adobe® Flash® Builder™ ile paketlenen profil oluşturucu, çöp toplayıcıyı el ile başlatmanıza olanak tanır. Çöp toplayıcıyı çalıştırmak uygulamanızın nasıl yanıt verdiğini ve nesnelerin bellekten doğru bir şekilde silinip silinmediğini görmenize olanak verir.

Not: Bir nesne bir olay dinleyicisi olarak kullanılmışsa, başka bir nesne ona başvurabilir. Bu durumda, başvuruları null olarak ayarlamadan önce removeEventListener() yöntemini kullanan olay dinleyicilerini kaldırın.

Neyse ki, bitmap'ler tarafından kullanılan bellek miktarı hızlı bir şekilde azaltılabilir. Örneğin, BitmapData sınıfı bir dispose() yöntemi içerir. Bir sonraki örnek 1.8 MB'lık bir BitmapData örneği oluşturur. Kullanımda olan geçerli bellek 1,8 MB'a çıkar ve System.totalMemory özelliği daha küçük bir değer döndürür:

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

Daha sonra, BitmapData bellekten elle kaldırılır (atılır) ve bellek kullanımı bir defa daha kontrol edilir:

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 

dispose() yöntemi pikselleri bellekten kaldırsa da, başvuru yine de onu tamamen bırakmak için null değerine ayarlanmalıdır. Belleğin hemen boşaltılması için artık bir BitmapData nesnesine ihtiyaç duymadığınızda her zaman dispose() yöntemini çağırın ve başvuruyu null değerine ayarlayın.

Not: Flash Player 10.1 ve AIR 1.5.2, System sınıfında disposeXML() adlı yeni bir yöntem sunar. Bu yöntem XML ağacını bir parametre olarak ileterek bir XML nesnesini anında çöp toplamaya uygun hale getirir.