Apache flex Flex4:垃圾收集不需要';行不通
我有一个TitleWindow组件,我正在通过PopUpManager.addPopUp()显示该组件。关闭组件时,我调用closePopUp事件,该事件将对象的变量设置为null,如下所示: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
// 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()强制垃圾收集(但不是在发行版中)。不,这是一个神话。看到或看到。