gpt4 book ai didi

flash - 在要进行 GC 的对象中将引用设置为 null?

转载 作者:行者123 更新时间:2023-12-04 21:24:47 24 4
gpt4 key购买 nike

// in a garbage collected VM, destroy someObject:
someObject.a = null;
someObject.b = null;
someObject = null;

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

假设我听到的是真的(如果不是,请纠正我),AVM2,ActionScript 3 VM(特别是在最新版本的 Flash Player 中)是否相同?

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

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

最佳答案

我无法为您提供任何更快的特定硬数据 - 设置为 null 与否。老实说,我不相信有人会。

我能做的最好的事情就是为您提供一些有关垃圾收集的信息,您可以从那里做出决定。

从 Flash Player 9 到 Flash Player 10 Adob​​e 进行了一些重大改进,尤其是在内存管理方面。有几个“加载外部 swf”的内存错误、未引用的声音残留等等。其中大部分已得到纠正。

Grant Skinner 强调了 GC 用来确定应该删除哪些对象的技术。请参阅有关其工作原理的出色演示(带有一些很酷的交互)http://gskinner.com/talks/resource-management/ (但请注意演示文稿是关于 FP9 的)

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

最终,在我看来,将每个变量/属性(引用或其他)“归零”是浪费且非常难以管理的。对于较小的事物可能是实用的,但是当对象变得更大并且有 100 个变量时,您不能一致地将它们全部清空。

顺势而为,Flash Player 只会为正确的做事方式优化他们的 GC,而不是相反。

关于flash - 在要进行 GC 的对象中将引用设置为 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5372216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com