Apache flex Flex4:垃圾收集不需要';行不通

Apache flex Flex4:垃圾收集不需要';行不通,apache-flex,actionscript-3,garbage-collection,flex4,Apache Flex,Actionscript 3,Garbage Collection,Flex4,我有一个TitleWindow组件,我正在通过PopUpManager.addPopUp()显示该组件。关闭组件时,我调用closePopUp事件,该事件将对象的变量设置为null,如下所示: // application private var myObject:MyObject; private function openPopUp():void { myObject = new MyObject(); myObject.addEventListener('closePop

我有一个TitleWindow组件,我正在通过PopUpManager.addPopUp()显示该组件。关闭组件时,我调用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会回收对象并释放内存。知道为什么不会发生这种情况吗?

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

Flash Player中的垃圾收集不是一门精确的科学,其工作原理与大多数人的预期略有不同。。。总而言之,它只在需要更多内存时才释放内存。这些文章对此进行了更详细的解释:

http://www.gskinner.com/blog/archives/2006/06/as3_resource_ma.html


此外,正如Dein所说,事件侦听器是闪存内存泄漏的最常见原因。您必须非常小心,并始终尝试删除它们。

在调试模式下,您可以尝试调用System.gc()强制垃圾收集(但不是在发行版中)。不,这是一个神话。看到或看到。