Çö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.