Flex 4:垃圾收集不起作用

时间:2010-11-22 10:33:46

标签: flex actionscript-3 garbage-collection flex4

我有一个我通过PopUpManager.addPopUp()显示的TitleWindow组件。当我关闭组件时,我正在调用closePopUp事件,它将对象的变量设置为null,如下所示:

// application
private var myObject:MyObject;

private function openPopUp():void
{
    myObject = new MyObject();
    myObject.addEventListener('closePopUp', closePopUp);
    PopUpManager.addPopUp(myObject, this, true);
}

private function closePopUp(e:Event):void
{
    myObject = null;
}

但是在调试模式下,我可以看到myObject被设置为null,但内存使用量没有减少。当我再次打开组件时,内存使用情况与以前一样。

我想当myObject变量设置为null时,GC会回收对象并释放内存。知道为什么没有发生这种情况吗?

2 个答案:

答案 0 :(得分:4)

尝试删除事件监听器,我认为将其挂在那里会阻止GC收集您的对象。

答案 1 :(得分:3)

Flash Player中的垃圾收集并不是一门精确的科学,与大多数人的期望有点不同......总而言之,它只在需要更多时释放内存。这些文章更详细地解释了它:

http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html http://www.gskinner.com/blog/archives/2006/06/as3_resource_ma.html http://blogs.adobe.com/aharui/2007/03/garbage_collection_and_memory.html

此外,正如Dein所说,事件监听器是Flash中内存泄漏的最常见原因。你必须非常小心,并总是试图删除它们。