2011-09-16 151 views
2

我正在開發一個明顯的內存泄漏的Flash遊戲。我做我應該用GC做的事情;刪除對象的所有引用,使其無效,刪除所有偵聽器(或使用弱偵聽器);但泄漏仍然存在。AS3:垃圾收集太大?

我偶然發現這篇文章: http://www.andymoore.ca/2010/03/motherfucking-as3-garbage-collection/

它聲稱太大的對象將永遠不會被垃圾收集。這個理論適合我的項目,因爲我的所有遊戲都駐留在經常創建和銷燬的幾個巨大的動畫片段中。

對於太大的物體永遠不會被垃圾收集的說法有什麼好處嗎?

+0

你是不是也處置的所有引用和刪除您加載的影片剪輯對象的聽衆? – TheDarkIn1978

回答

2

您可以嘗試使用SWFWire Debugger來準確查看未收集哪些對象。

免責聲明:這是我自己的項目

+0

真是一個絕妙的工具!這需要更多的認可! – Abdulla

+0

非常感謝!請不要猶豫,記錄錯誤或功能請求。 –

3

我曾參與過多箇中型到大型項目,並且您描述的泄漏似乎是遞歸處理的問題。您需要真正從最嵌套的項目中反省您的對象,並從這一點開始處理(停止,取消,處理位圖數據並刪除偵聽器)。

我建議你看一看那些: 一個很好的探查: https://code.google.com/p/flashpreloadprofiler/

Quasimondo開發商與大位圖和顯示應用程序中的鳥舍套件遇到的問題,模擬內存分配: http://www.quasimondo.com/archives/000691.php http://www.quasimondo.com/examples/memoryhog.html

對於GC問題上的更多資源,我建議您使用Adobe Jira和Bugbase系統: https://bugs.adobe.com/

我認爲這種說法沒有任何價值。還讀安迪摩爾評論:

因此,做一個快速通過死亡= null代碼,我減半我的記憶 足跡。我可以通過評論 所有的「.cacheAsBitmap = true」語句將這個數字降低80%。