Actionscript 3 AS3:匿名对象是否被垃圾收集?

Actionscript 3 AS3:匿名对象是否被垃圾收集?,actionscript-3,garbage-collection,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; 我相信您指的是“对象文字”,应该进行垃圾收集 Flash

我经常这样做是为了配置类的新实例

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;

我相信您指的是“对象文字”,应该进行垃圾收集

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

如果未被引用计数捕获,则最终应通过标记和扫描进行释放

参考计数

堆上的每个对象都跟踪指向它的对象的数量。每次创建对对象的引用时 对象的引用计数增加。删除引用时, 对象的引用计数将递减。如果对象有一个零 引用计数(没有任何东西指向它),它被添加到零 计数表(ZCT)。当ZCT满时,扫描堆栈以查找 从堆栈到ZCT上对象的任何引用。上面有什么东西吗 不带堆栈引用的ZCT将被删除

延迟引用计数的问题之一是循环引用。如果ObjectA和ObjectB相互引用,但不相互引用 系统中的对象指向它们,它们永远不会有零 引用计数,因此将永远不符合垃圾回收的条件 使用引用计数的集合。这是标记和扫描的地方 垃圾收集有帮助

标记/扫描

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

应用程序中的每个对象都有一个“标记位” 当垃圾收集开始时,所有这些标记位都被清除。这个 MMgc跟踪应用程序中的所有gcroot。垃圾 收集器从这些根开始,跟踪每个对象和集合 它到达的每个对象的标记位。不再存在的任何对象 从任何根都可以到达不再从任何地方可以到达 在应用程序中–其标记位在标记期间未设置 阶段一旦收集器完成标记它找到的所有对象, 扫描阶段开始。任何没有设置标记位的对象都是 被销毁,其内存被回收


我相信您指的是“对象文字”,应该进行垃圾收集

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

如果未被引用计数捕获,则最终应通过标记和扫描进行释放

参考计数

堆上的每个对象都跟踪指向它的对象的数量。每次创建对对象的引用时 对象的引用计数增加。删除引用时, 对象的引用计数将递减。如果对象有一个零 引用计数(没有任何东西指向它),它被添加到零 计数表(ZCT)。当ZCT满时,扫描堆栈以查找 从堆栈到ZCT上对象的任何引用。上面有什么东西吗 不带堆栈引用的ZCT将被删除

延迟引用计数的问题之一是循环引用。如果ObjectA和ObjectB相互引用,但不相互引用 系统中的对象指向它们,它们永远不会有零 引用计数,因此将永远不符合垃圾回收的条件 使用引用计数的集合。这是标记和扫描的地方 垃圾收集有帮助

标记/扫描

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

应用程序中的每个对象都有一个“标记位” 当垃圾收集开始时,所有这些标记位都被清除。这个 MMgc跟踪应用程序中的所有gcroot。垃圾 收集器从这些根开始,跟踪每个对象和集合 它到达的每个对象的标记位。不再存在的任何对象 从任何根都可以到达不再从任何地方可以到达 在应用程序中–其标记位在标记期间未设置 阶段一旦收集器完成标记它找到的所有对象, 扫描阶段开始。任何没有设置标记位的对象都是 被销毁,其内存被回收


该对象将通过引用传递。然后变量将超出范围。因此,它们实际上是相同的。因此,除非
MyClass
持有对对象的引用,否则无论哪种方式,它都有资格进行垃圾收集。如果您完全确定一次只需要一个类实例,那么最好使用单例设计模式。我个人在配置类中使用了singleton,所以我从未遇到过这个问题。我最近上传了一个用于Flex的singleton示例,向您展示了如何构建一个类似于Flex PopUpManager的singleton。您没有将其标记为Flex或flash。单身汉在这里是做不到的。这是我配置新实例的方式,而不是传递一系列未命名的函数参数。然后在新实例中,我通常有一个引用configObject的对象。基本上,我想知道的是,这样做是否有问题。似乎当我将类的实例设为null时,所有对conf的引用