Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 将对象中的引用设置为空,以作为GC';预计起飞时间?_Flash_Actionscript 3_Garbage Collection_Jvm_Clr - Fatal编程技术网

Flash 将对象中的引用设置为空,以作为GC';预计起飞时间?

Flash 将对象中的引用设置为空,以作为GC';预计起飞时间?,flash,actionscript-3,garbage-collection,jvm,clr,Flash,Actionscript 3,Garbage Collection,Jvm,Clr,我听说在Java或C#之类的好VM中,不应该这样做。将someObject的a和b设置为null将减慢垃圾收集的速度,因为GC需要更长的时间才能发现以前引用的a和b对象不再被引用,而如果您保持它们完好无损,GC将在清理someObject时立即检查它们 假设我听到的是真的(如果不是,请纠正我),AVM2、ActionScript 3虚拟机(特别是最新版本的Flash Player)是否也一样 我问这个问题的原因是我有一个同事就是这样做的,因为他在以前的雇主那里学到了速度更快,而且Flash有很多

我听说在Java或C#之类的好VM中,不应该这样做。将
someObject
a
b
设置为
null
将减慢垃圾收集的速度,因为GC需要更长的时间才能发现以前引用的
a
b
对象不再被引用,而如果您保持它们完好无损,GC将在清理
someObject
时立即检查它们

假设我听到的是真的(如果不是,请纠正我),AVM2、ActionScript 3虚拟机(特别是最新版本的Flash Player)是否也一样

我问这个问题的原因是我有一个同事就是这样做的,因为他在以前的雇主那里学到了速度更快,而且Flash有很多这样的怪癖(我觉得很容易相信)


我只是想知道这些信息是否仍然是最新的(对于其他类似的Flash优化也是如此)。根据我的经验,像这样的优化技巧在生活平台上很快就过时了。

我无法提供任何具体的硬数据,这些数据设置为null或not更快。我真的不相信有人会

我所能做的就是向您提供一些关于垃圾收集的信息,您可以从中做出决定

从FlashPlayer9到FlashPlayer10,Adobe已经做出了一些重大改进,特别是在内存管理方面。有几个“加载外部swf”的内存错误,未引用的声音粘在周围,等等。其中大部分已经纠正

Grant Skinner强调了GC用于确定应该删除哪些对象的技术。请看这篇精彩的演讲(有一些很酷的互动),了解它是如何工作的(但请注意,这篇演讲是关于FP9的)

正如他所说,有参考计数和标记扫描。最终AS3中的GC归结为引用。如果对象(非原始类型)具有对其的引用,则不会删除该对象,但如果没有,即无法访问该对象,则会将其标记为删除。但您无法控制删除实际发生的时间-可能是这一帧,也可能是下一帧

最终,在我看来,“空”每个变量/属性(引用或其他)都是浪费和不可协商的。对于较小的对象可能很实用,但是当对象随着100个变量变大时,您不能一致地将所有变量都置空


<> P>轨迹闪光灯玩家只会优化他们的GC来做正确的事情,而不是相反。

你甚至不应该考虑这是不是一个好主意。
// in a garbage collected VM, destroy someObject:
someObject.a = null;
someObject.b = null;
someObject = null;