2011-11-06 61 views
3

據我所知,任何未被任何東西引用的對象都是垃圾收集的,並且當我完成它們時,一直在確保引用對象的空值。我想知道的是幾件事情:垃圾收集在AS3中如何工作?

  1. 只做對象需要空引用嗎?數字,整數,字符串等 都可以離開,對嗎?對此有最佳做法嗎?

  2. 垃圾回收通常運行多久?當處理器需求低時,它傾向於運行 嗎?

  3. 有沒有一種方法可以告訴垃圾收集手動運行,例如當我完成了一個充滿精靈的遊戲場時,這樣的 ?如果處理器使用 的處理器使用率較低時垃圾收集趨向於運行,那麼這真的不是 ,因爲無論如何,它會在我希望的時間運行。

  4. 對象創建只是一個if或語句等範圍,除非他們 分配基準elseware,符合垃圾收集,對不對?

+0

只是在編號4 FYI:在動作沒有塊範圍。只有「本地」和「全球」。任何定義在'for'或'if'中的變量通常都屬於它的函數,並且在函數完成之前不會超出範圍。關閉也會讓示波器的運行時間比您想象的長。 –

回答

5

gskinner具有良好的article約GC在Flash Player

  1. 對象只由new操作符創建爲空引用,大括號運算符({X:5,Y:5} )和方括號運算符([1,2,3])應該爲空引用。
  2. 垃圾回收器使用一組啓發式查看RAM 分配和內存堆棧的大小,其中包括 確定何時運行。
  3. 您可以使用System.gc()在FP10中手動運行它,但它只能在調試播放器中使用 。
  4. 是的,這是正確的
+0

1.這對我來說很清楚 - 任何我使用「新」的東西,我需要稍後設置爲空。真棒! 2.這是否意味着它通常只在內存開始充滿時運行,或者當處理器需求量低時才運行。我認爲我主要關注垃圾回收的標記掃描部分。 –

+1

當您的應用程序填充應用程序實例的分配內存時,觸發GC。它不取決於處理器的需求。 – zaynyatyi

+0

這是一個恥辱。我希望能夠在我知道該計劃不會做太多時觸發(甚至請求)垃圾回收。我想這只是我自己來確保未使用的物品被斷開或回收。謝謝你的幫助! –