`
clm__
  • 浏览: 6446 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

AS3的内存泄漏与垃圾回收

阅读更多

一、内存泄漏

指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费(百度搜的资料)。这段话是什么意思呢?打个比方吧,放牛人与一只牛,放牛人好比程序设计中的引用,牛好比对象。我们通过引用来控制对象,放牛人通过绳子牵着牛,当牛吃完草后应该牵它回家而不是放手让它走失。当我们失去对该对象(某块内存)的控制时就产生了“内存泄露”。

 

二、垃圾回收

简单点说不用的内存都是垃圾,而垃圾回收就是把没用的内存都回收以释放内存空间。

AS3的垃圾回收主要有两种方法:“引用计数法”和“标识清除法”。

 

引用计数法:当一个内存对象添加了一个引用的时候,这个计数器就加1,当删除一个内存对象的引用时,该计数器就减1。当FP判断计数器为0的时候表示这个对象已经没有引用了,没有引用就没办法控制他了,符合垃圾回收机制的条件。但有一种情况则会有所不同!当有多个对象互相引用的时候,所有的计数器始终为1,这时就出现了内存泄露的情况。举个例子:

var a:Object = {}
var b:Object = {foo:a};

a.foo = b;

a=null;

b=null;

上述代码中,所有对象的引用都被删除了。没有任何办法在程序中再访问这两个对象了,但这两个对象的引用计数器都是1,因为它们相互引用。 即该两个内存块确实是没用了,但是垃圾回收机却不清理它。可想而知,这个办法在一般情况下还是不错的,但是遇到这种情况就不行了!于是要考虑第二种

方法了。

 

标识清除法: 这个方法在执行的时候会从FLASH的根对象也就是root开始到每一个引用的对象做标识。然后FLASH会遍历当前程序中的所有引用,发现没有标识的对象就清除。这样的话清除就准确了!但是会遇到一个问题。遍历是很消耗CPU的,虽然fp9通过调整迭代标识清除缩减对CPU的占用,但是消耗依然很大!所以采用了另外一种比较消极的处理方法!就是分段执行,每次执行一部分,然后偶尔执行一次。这样来减小CPU的消耗。所以我们通常知道,FP9、10的垃圾回收机是偶尔执行的!

 

三、垃圾回收的函数方法

System.disposeXML()
BitmapData.dispose()
Loader.unloadAndStop()
System.gc() ,这是一个最有用的函数,却只适用于调试版的FP

removeChild()

removeEventListener()

设置引用为null

System.totalMemory,返回值是内存占用字节数,这个跟内存回收没什么关系,只是用来查看内存占用,调试常用到

……

 

以上函数都是垃圾回收会用到的方法,不过一般需要按具体情况具体去确定综合运用几个方法。这个需要你真正理解FP的内存回收机制才会懂得如何运用。

 

(有部分内容参考了网上的一些文章,不能一一列举,望原作者见谅)

 

推荐:

AS3.0对象复制

==================================================

作者:绿色花园

 

原文地址:http://www.chenlinsheng.com/archives/1957

分享到:
评论

相关推荐

    AS3内存优化及垃圾回收参照.pdf

    内存管理和垃圾回收是任何程序设计语言中的重要概念,AS3也不例外。在AS3中,内存优化和垃圾回收策略对性能有着显著影响,特别是在处理大量数据或者运行长时间的程序时。 1. **显示对象的选择**: - Shape对象适用...

    Flash强制垃圾内存回收测试

    当一个对象不再被任何变量引用时,垃圾回收器会自动释放该对象占用的内存,防止内存泄漏。然而,在某些情况下,我们可能需要主动触发垃圾回收,比如在内存占用过高或测试内存优化时。这通常被称为“强制垃圾回收”。...

    AS内存泄漏检测1

    首先,我们来看标题提到的“AS内存泄漏检测1”。AS内置的内存分析工具可以帮助开发者实时监测应用的内存使用情况,识别可能的内存泄漏。在描述中,提到了一个测试场景:在一个Activity中,onCreate()方法里创建了一...

    as3 loader资源的回收

    在ActionScript 3 (AS3)中,Loader ...总之,理解并正确实现AS3 Loader资源的回收是提高应用性能和避免内存泄漏的关键。通过遵循上述步骤,并结合AS3GCLoader提供的示例,你可以确保你的AS3项目能够高效且稳定地运行。

    Flex内存泄露总结

    Flex内存泄露总结主要聚焦在Flash Player的垃圾回收机制和内存管理问题上,这对于优化Flex应用程序的性能至关重要。首先,我们要理解垃圾回收的基本原理。在Flash Player中,内存的释放工作由垃圾回收器负责,它是一...

    ActionScript3代码规范 包含如何防止内存泄漏

    根据提供的标题、描述、标签以及部分内容,我们可以总结出与ActionScript3代码规范及内存泄漏相关的几个关键知识点: ### 一、ActionScript3简介 #### 1.1 ActionScript3概述 ActionScript3 (AS3) 是一种面向对象...

    flash关于内存管理与内存管理

    内存管理是编程中的关键环节,尤其在Flash和ActionScript(AS)开发中,垃圾回收(Garbage Collection,GC)机制是防止内存泄露的关键。Flash Player的内存管理主要依赖于其内部的AVM(ActionScript Virtual Machine...

    AS3性能测试

    3. **内存管理**:AS3使用垃圾回收机制管理内存,但过度的内存分配和释放可能导致性能下降。测试可以帮助识别内存泄漏或不必要的资源消耗,从而调整代码以实现更高效的内存使用。 4. **事件处理**:AS3中的事件驱动...

    flashas3手册

    最后,ActionScript 3的优化技巧也是学习的重点,如正确使用垃圾回收机制,避免不必要的内存泄漏,以及利用早期绑定和优化代码结构来提高性能。 总的来说,《Flash AS3 手册》包含了从基础到高级的所有内容,无论你...

    Flex内存管理及相关内容

    Flex作为一种用于构建RIA(Rich Internet Applications)的应用框架,其背后的编程语言ActionScript(简称AS)支持垃圾回收(Garbage Collection, GC)。这使得开发者无需手动管理内存,从而减少了一些常见的内存...

    Flash AS3 工具性能输出窗口

    2. **内存管理**:AS3使用垃圾回收机制管理内存,但不当的内存分配和释放可能导致内存泄漏。性能窗口可能包含内存使用情况的图表,显示峰值和增长趋势,从而帮助检测内存问题。 3. **渲染效率**:在Flash环境中,...

    as3.0学习手册

    - **内存管理**: AS3 使用自动垃圾回收机制来管理内存,减少了内存泄漏的风险。 - **事件驱动模型(Event-driven model)**: AS3 基于事件循环,使得应用程序能够响应用户的交互操作,如点击、滚动等。 - **多媒体...

    AS3简体中文帮助文档

    7. **ActionScript与Flash Player交互**:AS3与Flash Player的交互是通过Stage和DocumentClass等类完成的,可以控制舞台上的元素、监听和响应用户的输入。 8. **性能优化**:AS3编程时应关注内存管理,合理使用垃圾...

    内存分析工具MAT

    3. **视图分析**:如“-leak suspects”视图可以快速定位可能的内存泄漏,而“MAT Histogram”则可以查看类的实例数量和内存消耗。 4. **碎片分析**:检查内存碎片,以优化内存分配和回收。 5. **比较heap dump**...

    FlashAS3动画教程

    合理利用AS3的特性,如事件驱动架构和垃圾回收机制,可以显著提升动画的流畅度和响应性。 ### 结论 “Flash AS3动画教程”不仅涵盖了基本的动画技术,还深入讲解了如何使用AS3进行高级动画控制和优化。通过掌握AS3...

    as3 图片展示

    - **垃圾回收**:确保不再使用的Loader对象及时释放,避免内存泄漏。 8. **XML或JSON数据驱动**: - 可以使用XML或JSON文件存储图片的URL、描述等信息,动态加载和展示图片,增加程序的灵活性和可扩展性。 9. **...

    AS3游戏编程大学(中文)源码

    9. **性能优化**:AS3游戏开发需要注意性能优化,避免内存泄漏,合理使用垃圾回收机制,以及适时的位图缓存等技巧。 10. **调试与测试**:学习如何使用Flash Builder或FDT等IDE的调试工具,定位和修复代码问题,...

Global site tag (gtag.js) - Google Analytics