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

标签 flash actionscript-3 garbage-collection jvm clr

// 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/

相关文章:

javascript - 如何在浏览器窗口中 move 鼠标?

flash - 为 AS3 嵌入字体。如何?

apache-flex - 使用 MP4 编码在 Flash 中流式传输网络摄像头视频

apache-flex - 如何按原样调整整个 Air 应用程序的大小,忽略组件的位置和大小逻辑 - 例如缩放

java - 如何检查光量?

flash - 将每一帧渲染为单个图像

actionscript-3 - 还有可用的 AS3 map API 吗?

java - 我的 JVM 内存泄漏在哪里?垃圾收集器工作正常吗?

c# - 任务和垃圾收集存在哪些问题?

java - 让兴奋的垃圾收集器平静下来