AS3:匿名对象收集垃圾?

时间:2012-05-26 01:40:35

标签: actionscript-3 garbage-collection

我为配置新的类实例

做了很多工作
var myVar = new MyClass({param:1,param2:true,param3:"hello"});

这个匿名对象是否会被垃圾收集?

使用它后创建和销毁对象会更好吗?

var myConfig:Object = {param:1,param2:true,param3:"hello"}
var myVar = new MyClass(myConfig);
myConfig = null;

1 个答案:

答案 0 :(得分:4)

我相信你指的是“对象文字”,应该是垃圾收集。

Flash使用两种垃圾收集方法 - 引用计数和标记和扫描。

如果没有被引用计数捕获,它最终应该通过标记和扫描来释放。

参考计数

  

堆上的每个对象都会跟踪指向它的内容的数量。每次创建对象的引用时,   对象的引用计数递增。删除引用时   对象的引用计数递减。如果对象为零   引用计数(没有任何指向它),它被添加到零   计数表(ZCT)。当ZCT已满时,扫描堆栈以查找   从堆栈到ZCT上的对象的任何引用。任何对象   没有堆栈引用的ZCT将被删除。

     

延迟引用计数的一个问题是循环引用。如果ObjectA和ObjectB彼此引用但没有其他引用   系统中的对象指向它们,它们永远不会为零   引用计数,因此永远不会有资格获得垃圾   使用引用计数收集。这是标记和扫描的地方   垃圾收集帮助。

<强>标记/扫描

  

在Flash Player或AIR中运行的应用程序具有多个GCRoot。   您可以将GCRoot视为具有对象的树的树干   作为分支机构的应用程序。舞台是一个GCRoot。装载机是   GCRoots。某些菜单是GCRoots。每个仍在使用的对象   通过应用程序可以从其中一个GCRoots到达   应用。 GCRoots永远不会被垃圾收集。

     

应用程序中的每个对象都有一个“标记位”。当Mark阶段   垃圾收集开始,所有这些标记位都被清除。该   MMgc跟踪应用程序中的所有GCRoot。垃圾   收集器从那些根开始,遍历每个对象和集合   它到达的每个对象的标记位。任何不再是的对象   无法从任何地方访问任何根目录   在应用程序中 - 它的标记位在Mark期间没有设置   相。收集器完成后,标记它找到的所有对象,   扫描阶段开始。任何没有设置标记位的对象都是   被摧毁并恢复了记忆。