引 用计数法简单,它不会非CPU带来巨大的负担;多数情况下它工作正常。不幸地是,采用引用计数法的垃圾回收器在遇到循环引用时效率不高。循环引用是指对象交叉引用(直接、或通过其他对象间接实现)的情况。即使应用程序不再引用该对象,它的引用计数器仍然大于0,因此垃圾收集器永远无法收集它们。下面的代码 演示循环引用是怎么回事:
ActionScript 代码
- var a:Object = {}
-
- var b:Object = {foo:a};
-
- a.foo = b;
-
- delete(a);
- delete(b);
上 述代码中,所有应用程序中活动的引用都被删除。我没有任何办法在程序中再访问这两个对象了,但这两个对象的引用计数器都是1,因为它们相互引用。循环引用 还可以更加负责 (a 引用 c, c引用b, b引用a, 等等) 并且难于用代码处理。Flash Player 6 和 7的XML对象有很多循环引用问题: 每个 XML 节点被它的孩子和父亲引用,因此它们从不被回收。幸运的是Flash Player 8 增加了一个叫做标识-清除的新垃圾回收技术。
标识-清除法
ActionScript 3.0 (以及 Flash Player 8) 垃圾回收器采用第2种策略标识-清除法查找非活动对象。Flash Player从你的应用程序根对象开始(ActionScript 3.0中简称为root)直到程序中的每一个引用,都为引用的对象做标记。
接下来,Flash Player遍历所有标记过的对象。它将按照该特性递归整个对象树。并将从一个活动对象开始能到达的一切都标记。该过程结束后,Flash Player可以安全的假设:所有内存中没有被标记的对象不再有任何活动引用,因此可以被安全的删除。图1 演示了它如何工作:绿色引用(箭头)曾被 Flash Player 标记过程中经过,绿色对象被标记过,白色对象将被回收。
Figure 1. Flash Player采用标记清除方法标记不再有活动引用的对象
标记-清除法非常准确。但是,由于 Flash Player 遍历你的整个对象结构,该过程对CPU占用太多。Flash Player 9 通过调整迭代标识-清除缩减对CPU的占用。该过程跨越几个阶段不再是一次完成,变成偶尔运行。
延期(执行)垃圾回收器和不确定性
Flash Player 9垃圾回收器操作是延期的。这是一个要理解的非常重要的概念:当你的对象的所有引用删除后,它不会被立即删除。而是,它们将在未来一个不确定的时刻被 删除(从开发者的角度来看)。垃圾收集器采用一系列启发式技巧诸如查看RAM分配和内存栈空间大小以及其他方法来决定何时运行。作为开发者,你必须接受这样的事实:不可能知道非活动对象何时被回收。你还必须知道非活动对象将继续存在直到垃圾收集器回收它们。所以你的代码会继续运行(enterFrame 事件会继续)、声音会继续播放、装载还会发生、其它事件还会触发等等。
记住,在Flash Player中你无权控制何时运行垃圾收集器去回收对象。作为开发者,你需要尽可能把你的游戏或应用程序中无用的对象应用清除。管理无用对象的策略将会在我的另一篇文章重点介绍:Flash Player 9的资源管理策略。
下图模拟垃圾回收器中总内存(包含活动对象和非活动对象的和,译者注)的锯齿状部分(点击图2或下方链接)。锯齿的产生是由于垃圾回收器执行回收(原文执行 清除,疑为执行回收)。点击该图并注意,按下空格键来中止或重启,并在运行时按住up/down键头以控制内存使用趋势。
http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html#
Figure 2. Garbage collection simulation
Garbage collection simulation
正如下面演示的一样(单击图3或下方链接),拖动对象(圆角矩形)到桌面并建立它们之间的引用(使用连线,译者注)。点击run reference或mark and sweep按钮以查看哪些对象会被回收。对象上有标识到该对象的引用个数。
http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html#
Figure 3. Garbage collection simulation: mark and sweep
Garbage collection simulation: mark and sweep
从这里通往何方?
理解垃圾回收机制是编写优化代码的重要前提。优化的代码保证你的Flash项目在客户机器上运行时不会带来大的冲击。阅读更多相关文章,Flash Player 9中的资源管理策略,或访问Flash开发者中心以及Flash Player开发者中心。
也可以查看我的blog gskinner.com 阅读关于弱引用的文章并下载我写的一个辅助类。
关于作者
Grant Skinner是gskinner.com公司CEO及架构师,该公司是一个Flash开发和咨询公司。他与新媒体机构以及有进取心的客户合作开发前沿应用、游戏和多媒体程序。他擅于将支持接口设计的代码、可用性、市场和业务逻辑融汇,由此带给他国际上赞誉并获得包括Best Canadian Developer at FITC 2005在内的多个业界大奖。Grant在gskinner.com/blog/写blog并在incomplet.org展示他的验证性的创作。
相关推荐
标题“FlashPlayer9 Debug”指的是Adobe Flash Player的调试版本,专为开发人员设计,以便在FlashDevelop这样的集成开发环境中(IDE)对ActionScript代码进行测试和调试。FlashPlayer9是这款广泛使用的网络浏览器...
Adobe Flash Player是一款曾经广泛应用于网页浏览器的多媒体播放器,它支持播放动画、视频、音频以及交互式内容。然而,随着技术的发展,特别是HTML5的普及,Flash Player的重要性逐渐下降,且由于安全问题,Adobe...
"MP3转换为Flash音乐播放器:Aleo Flash MP3 Player Builder绿色版"是一个专注于将MP3和其他音频格式转换为Flash(SWF)播放器的工具。这款软件提供了便捷的方式,使得用户能够批量处理音频文件,将其转化为适合网页...
Adobe Flash Player(Flash Player官方下载)是一个集成的多媒体播放器,让你在Web上享受更广泛的多媒体体验。Adobe Flash Player官方版可显示和播放多媒体内容,从数以千计的高度交互性的flash player下载,到有音频...
1. **调试功能**:Flash Player调试版提供了一种跟踪和识别问题的方法,包括错误消息、警告和详细的堆栈跟踪,这对于定位代码错误非常有帮助。 2. **SWF文件解析**:Flash Player能够解析和执行SWF文件中的...
FlashPlayer9 官方独立播放器 版本:9.0.124.0
标题中的"Arm64 Flashplayer Linux UOS 鲲鹏 飞腾"涉及的是在基于Arm64架构的Linux操作系统UOS(统一操作系统)上运行Flash Player的场景,特别提到了鲲鹏和飞腾这两种国产处理器平台。下面将详细阐述相关知识点: ...
**FlashPlayer V10.1.85:深入解析与应用** FlashPlayer V10.1.85 是一个重要的软件版本,它属于Adobe Flash Player系列,是互联网上广泛使用的多媒体内容播放器。这款软件的核心功能是播放含有Flash技术的交互式...
- **ActiveX** 支持:FlashPlayer的运行通常依赖于ActiveX控件,Delphi 7提供了对ActiveX的全面支持,允许开发者在Delphi应用中无缝集成ActiveX控件。 此外,开发者还需要关注安全性问题,因为FlashPlayer在后期...
3. **更新**:Flash Player经常需要更新以修复安全漏洞,因此安装后应定期检查更新。 4. **设置**:浏览器可能需要被配置以允许运行Flash内容,这通常可以在浏览器的扩展或插件设置中找到。 5. **替代方案**:由于...
1. **多媒体播放**:Flash Player支持播放SWF格式的动画和交互式内容,这些内容可能包含2D图形、音频、视频和复杂的互动元素。它可以处理矢量图形,这意味着内容在任何分辨率下都能保持清晰。 2. **ActionScript 3...
5. **浏览器插件**:Flash Player最初作为浏览器插件使用,适用于多种浏览器,如Internet Explorer、Firefox、Chrome等。 6. **版本更新**:Flash Player经历了多次版本迭代,每个新版本通常修复了旧版的漏洞并增加...
综合这些信息,我们可以理解这是一个专为Linux和Chrome浏览器设计的Adobe Flash Player最后版本,用户可以按照readme.txt的指示进行安装和使用。由于Adobe已停止对Flash的支持,用户需要注意安全风险,并尽快迁移到...
Flash Player是一款广泛应用于网页端的多媒体播放器,尤其在展示互动式内容如游戏、动画以及应用程序方面具有重要作用。Adobe Flash Player 11 AX Debug是最新的调试版本,它为开发人员和学习FLEX、ActionScript(AS...
首先,我们要理解FlashPlayer11的核心功能。它支持ActionScript3.0,这意味着它可以运行更复杂的交互式应用程序,包括游戏、动态图形以及网络视频。此外,FlashPlayer11还提升了对高清视频的支持,提供流畅的视频...
3. **事件处理和交互性**:由于Flash Player播放器与Flash媒体文件可以实现交互,因此需要理解QT的信号和槽机制,这是QT中实现对象间通信的重要方式。当用户与Flash内容交互时,如点击按钮或触发某些动作,这些事件...
Ubuntu Linux 上安装最新的 FlashPlayer 10.2 beta FlashPlayer 是一个非常流行的浏览器插件,用于播放 flash 视频和游戏。 Adobe 公司最近发布了最新的 FlashPlayer 10.2 beta 版本,这个版本带来了阶段性视频硬件...
Flash Player Debug版是一款专为开发人员设计的特殊版本,它允许开发者在运行含有ActionScript代码的Flash内容时进行调试。ActionScript是Adobe Flash环境中用于创建交互式内容、动画和应用程序的主要编程语言。与...
2. 调试插件:Flash Player的调试版本包含了额外的工具和日志功能,允许开发者追踪代码执行过程,查找并解决错误。这对于优化和修复Flash内容中的问题至关重要。 3. 32位:这里的"32bit"指的是该版本适用于32位操作...
标题 "install_flash_player_ppapi(无锁区)" 指的是一个用于安装Adobe Flash Player PPAPI(Pepper Plugin API)版本的程序,这个版本特别强调了“无锁区”特性,意味着它不受地理限制,可以播放来自全球各地的...