Aby uruchomić proces czyszczenia pamięci, należy usunąć wszystkie odwołania do obiektów.
Procesu czyszczenia pamięci nie można uruchomiać bezpośrednio w wersji wydania programu Flash Player. Aby mieć pewność, że obiekt zostanie usunięty przez proces czyszczenia pamięci, należy usunąć wszystkie odwołania do tego obiektu. Należy pamiętać o tym, że stary operator
delete
używany w języku ActionScript 1.0 i 2.0 zachowuje się inaczej w języku ActionScript 3.0. Może służyć wyłącznie do usuwania dynamicznych właściwości w dynamicznym obiekcie.
Uwaga:
Proces czyszczenia pamięci można wywołać bezpośrednio w programie Adobe® AIR® oraz w wersji Flash Player z debugerem.
Przykład: poniższy kod ustawia odwołanie do obiektu Sprite na
null
:
var mySprite:Sprite = new Sprite();
// Set the reference to null, so that the garbage collector removes
// it from memory
mySprite = null;
Należy pamiętać o tym, że ustawienie obiektu na
null
, nie oznacza jego usunięcia z pamięci. W niektórych przypadkach proces czyszczenia pamięci nie jest uruchamiany, jeśli dostępna ilość pamięci nie zostanie uznana za dostatecznie małą. Czyszczenia pamięci nie można jednoznacznie przewidzieć. Proces przydzielania pamięci uruchamia czyszczenie pamięci, a nie usuwanie obiektów. Uruchomiony proces czyszczenia pamięci znajduje grafy obiektów, które nie zostały jeszcze usunięte. Wykrywa nieaktywne obiekty w grafach, znajdując obiekty, które odwołują się do siebie nawzajem, ale z których nie korzysta już aplikacja. Wykryte w ten sposób nieaktywne obiekty są usuwane.
W przypadku dużych aplikacji ten proces może powodować znaczne obciążenie procesora, wpływać na wydajność i powodować poważne spowolnienie aplikacji. W miarę możliwości należy ograniczać uruchamianie procesu czyszczenia pamięci poprzez ponowne wykorzystywanie obiektów. Ponadto w miarę możliwości należy ustawiać odwołania na null — dzięki temu proces czyszczenia pamięci poświęci mniej czasu wyszukiwaniu obiektów. Proces czyszczenia pamięci należy traktować tylko jako rodzaj zabezpieczenia i zawsze jawnie zarządzać cyklami życia obiektów.
Uwaga:
Przypisanie odwołaniu do obiektu wyświetlanego wartości null nie gwarantuje wstrzymania tego obiektu. Obiekt nadal zużywa cykle procesora, dopóki nie zostanie usunięty przez proces czyszczenia pamięci. Należy zadbać o prawidłowe dezaktywowanie obiektu przed przypisaniem odwołaniu do niego wartości
null
.
Proces czyszczenia pamięci można uruchamiać za pomocą metody
System.gc()
, która jest dostępna w środowisku Adobe AIR oraz w wersji programu Flash Player z debugerem. Program profilujący dostępny w pakiecie z programem Adobe® Flash® Builder™ umożliwia ręczne uruchamianie procesu czyszczenia pamięci. Uruchomienie procesu czyszczenia pamięci umożliwia sprawdzenie, w jaki sposób reaguje na to aplikacja, oraz czy obiekty są poprawnie usuwane z pamięci.
Uwaga:
Jeśli obiekt był używany jako detektor zdarzenia, inny obiekt może się do niego odwoływać. W takim przypadku detektory zdarzeń należy usunąć za pomocą metody
removeEventListener()
przed ustawieniem odwołań na
null
.
Na szczęście ilość pamięci używanej przez bitmapy można natychmiast zmniejszyć. Na przykład klasa BitmapData zawiera metodę
dispose()
. Poniżej przedstawiono przykład tworzenia instancji klasy BitmapData, która zajmuje 1,8 MB pamięci. Ilość aktualnie wykorzystywanej pamięci wzrasta do 1,8 MB, a właściwość
System.totalMemory
zwraca mniejszą wartość:
trace(System.totalMemory / 1024);
// output: 43100
// Create a BitmapData instance
var image:BitmapData = new BitmapData(800, 600);
trace(System.totalMemory / 1024);
// output: 44964
Następnie obiekt BitmapData jest ręcznie usuwany (za pomocą metody dispose) z pamięci i ponownie sprawdzane jest aktualne wykorzystanie pamięci:
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
Mimo że metoda
dispose()
usuwa piksele z pamięci, w celu całkowitego zwolnienia pamięci odwołanie musi być ustawione na
null
. Jeśli obiekt BitmapData nie jest już potrzebny, należy zawsze wywołać metodę
dispose()
i ustawić odwołanie na
null
— dzięki temu pamięć zostanie natychmiast zwolniona.
Uwaga:
W programie Flash Player 10.1 i środowisku AIR 1.5.2 wprowadzono nową metodę o nazwie
disposeXML()
, która jest dostępna w klasie System. Ta metoda umożliwia natychmiastowe udostępnienie obiektu XML dla procesu czyszczenia pamięci, ponieważ przekazuje drzewo XML jako parametr.