2012-12-20 59 views
3

我非常欣賞Robotlegs,但最近出現了GC問題。我沒有通過設置引用null來處理上下文對象。藉助於FB profile工具,我發現上下文對象看起來像是一個「GC Root」。 要搞清楚,我WIRTE一個簡單的類,它創建了一個背景OBJ,讓它unreachable.Here是這個類的細節:爲什麼Context成爲GCRoot?

public class MemoryLeak extends Sprite{ 
    public function MemoryLeak() 
    { 
     makeAndDrop(); 
    } 

    public function makeAndDrop():void{ 
     var _context = new Context(this); 
     _context = null; 
    } 
} 

當我跑這節課,我希望它被GC配置,但它不起作用(大多數時候,並非每次)。配置文件工具告訴我這個實例是一個GCRoot。我閱讀了一些關於GC的文章,但很少有人提到GCRoot本身。有誰能告訴我爲什麼,並且非常感謝你! PS:我試圖在makeAndDrop()後兩次調用System.gc(),但它不起作用。事實上,我更關心的是「GCRoot」問題(由fb配置文件暗示),如果你告訴我這個問題可能會有所幫助。

+0

GC並不總是運行(例如,如果有足夠的備用內存)和RL使用可能影響GC的弱聽衆? – 2012-12-20 19:12:06

+0

將此上下文作爲模塊加載嗎?因爲我看不到爲什麼會將其標記爲GCRoot的另一個原因。無論如何,它有時候會被釋放,有時甚至不會,這與自動垃圾收集有關,如果應用程序有足夠的空閒內存,對象可以在內存中逗留一段時間。 – Creynders

+0

http://stackoverflow.com/questions/14000712/why-is-it-a-bug-of-flash-builder-or-something – ForbetterCoder

回答

0

我認爲上下文可能會listenthis,以便它可以對任何添加的子項執行依賴注入或爲它們創建中介。人們會希望在與mediatorMap或viewMap交談之前,不會連接監聽器,但我認爲RL作者可能不會考慮在某個時間段內需要在某個View上使用Context的用例比視圖的實際使用壽命短。

相關問題