2009-11-12 96 views

回答

3

基本上你需要刪除所有對象事件偵聽器,並刪除所有引用使其完全未提供給其餘的應用。

刪除事件偵聽器與*.removeEventListener(event type, function)相當活躍,並刪除引用使用delete(varName)

這樣做大多數情況下都能正常工作,但仍然有些情況下,這還不夠,並且真正利用了garbace集合,您需要將代碼的各個方面的支持實踐結合起來,而不僅僅是當你想要刪除一些東西。

zombiegx在尋找更多信息時發佈了您最重要的兩項資產。

0

http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html

這是我發現關於垃圾收集最好的文檔。簡而言之,VM2使用一種稱爲標記清除的技術。它基本上遍歷應用程序的每個對象,如樹,並標記它們。任何不再標記的對象都可以被解除分配。這個過程發生在多個幀上,而不是一次全部發生。

因此,對於有資格進行垃圾收集的東西,一定不能有任何對它的引用,例如它必須從顯示列表中刪除,而不是其他對象持有引用。

需要注意的一件事是參考文獻很少。字典對象例如可以通過傳入布爾值來使用弱引用。這意味着當一個對象被放置在已被設置爲使用弱引用的字典中時,它將不會被視爲引用,因此有資格進行垃圾回收(假設沒有其他引用)

1

大多數一切有了解它包含在上面列出的那些博客文章,但基本的向下突破爲:

  1. 刪除所有對象引用。這包括刪除事件偵聽器或使用弱引用,如上所述,並確保有問題的對象不在任何集合對象中。
  2. 將原始對象句柄設置爲「null」以幫助垃圾回收器實現引用爲「no」更長的活動
  3. 等待。 :)或者使用Grant Skinner技巧(上面鏈接)嘗試強制垃圾收集。
+0

不要使用那個黑客來強制垃圾收集 - 在Grants的建議:) – Allan 2009-11-14 11:06:25

+0

是的 - 我在幾年前在360 Flex的演示文稿中介紹了這個黑客,而Adobe Flex團隊成員並不熱情。 – 2009-11-16 22:47:17