as3 内存回收机制

as3 内存回收机制

ID:5502532

大小:87.50 KB

页数:20页

时间:2017-12-15

as3 内存回收机制_第1页
as3 内存回收机制_第2页
as3 内存回收机制_第3页
as3 内存回收机制_第4页
as3 内存回收机制_第5页
资源描述:

《as3 内存回收机制》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、AS3内存回收机制一、AS3内存回收机制1二、AS3内存回收机制2三、AS3强制内存回收方法之二3四、AS3释放内存6五、AS3中的内存泄露与垃圾回收8六、AS3内存释放优化原则9七、as3内存回收机制测试10八、AS3内存优化13条12九、AS3的垃圾回收机制详解14十、flashas3内存管理和资源管理17十一、轻松几行让你AS3程序不再“内存泄露18注意:本资源多半来源于互联网sword收集一、AS3内存回收机制1.什么是垃圾回收器垃圾收集器是一个后台进程它负责回收程序中不再使用的对象占用的内存。非活动对象就是不再有任何其他活动对象引用它。为便

2、于理解这个概念,有一点非常重要,就是要意识到除了非原生类型(Boolean,String,Number,uint,int除外),你总是通过一个句柄访问对象,而非对象本身。当你删除一个变量其实就是删除一个引用,而非对象本身。2.as中内存机制的方法首先是引用计数法:引用计数法是一种用于跟踪活动对象的较为简单的方法,当你创建一个指向某个对象的引用,该对象的引用计数器加1;当你删除该对象的一个引用,该计数器减1.当某对象的计数器变成0,该对象将被标记以便垃圾回收器回收。vara:MovlieClip=newMovieClip();addChild(a);/

3、/a的引用计数器为1varb:MovieClip=a;//a的引用计数器为2addChild(b);removeChild(a);a=null;//a的引用计数器为1removeChild(b);b=null;//a的引用计数器为0其次是标志清除法:清除法查找非活动对象。FlashPlayer从你的应用程序根对象开始(ActionScript3.0中简称为root)直到程序中的每一个引用,都为引用的对象做标记。接下来,FlashPlayer遍历所有标记过的对象。它将按照该特性递归整个对象树。并将从一个活动对象开始能到达的一切都标记。该过程结束后,Fl

4、ashPlayer可以安全的假设:所有内存中没有被标记的对象不再有任何活动引用,因此可以被安全的删除。下图就是那张十分有名的图了:                                    绿色引用(箭头)曾被FlashPlayer标记过程中经过,绿色对象被标记过,白色对象将被回收。最后就是几种比较常见的内存泄露情况:        1.引用泄露:对子对象的引用,外部对本对象或子对象的引用都需要置null;         2.系统类泄露:使用了系统类而忘记做删除操作了,如BindingUtils.bindSetter(),ChangeW

5、atcher.watch()函数时候完毕后需要调用ChangeWatcher.unwatch()函数来清除引用,否则使用此函数的对象将不会被删除;类似的还有MUSIC,VIDEO,IMAGE,TIMER,EVENT,BINDING等。       3.效果泄露:当对组件应用效果Effect的时候,当本对象本删除时需要把本对象和子对象上的Effect动画停止掉,然后把Effect的target对象置null;如果不停止掉动画直接把Effect置null将不能正常移除对象。      4.SWF泄露:要完全删除一个SWF要调用它的unload()/unl

6、oadAndStop()方法并且把对象置null;       5.图片泄露:当Image对象使用完毕后要把source置null,加载图片的时候最好draw一个出来,然后将loader处理掉。       6.声音、视频泄露:当不需要一个音乐或视频是需要停止音乐,删除对象,引用置null;二、AS3内存回收机制AS3通过垃圾回收(GarbageCollection)移除不需要的对象,它需要一定条件。AS3中的对象被回收需要达到一定条件:1、 该对象无法通过任何变量访问。也就是没有变量指向该对象,或者指向该对象的变量生命周期结束。2、 程序中所有对象

7、所占的内存接近当前系统分配给Flash运行的内存容量时,触发回收机制,移除符合条件1的对象。这里的第二个条件我们无法控制,没有办法手工强制执行垃圾回收,所有不用的对象都是间接移除,也就是不可能即刻移除。这和ActionScript的IncrementMarkAndSweep移除策略有关。不再详细讨论。那么我们要做的工作就是满足第一个条件,让对象符合被回收的条件。总结一下如何来满足条件:1、移除该对象的所有引用,也就是所有引用该对象的变量赋值为null,或刻意的限制该变量的生命周期。2、对于显示对象或某个数组中的元素,应该在显示列表或该数组中将其移除,

8、再赋值null。3、该对象注册的所有事件侦听应该被移除,否则该事件依然运行(内存中还在)。如果无法直接删除事

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。