AS3垃圾回收,在FlashPlayer10.1中实现回收Loader对象
2010-06-23 00:45
295 查看
AS3和.NET一样,不需要开发人员关心垃圾回收,Player会在某个不确定的时间对没有被引用的对象进行内存释放,有时候需要垃圾回收器尽早工作,以释放占用的大量内存让程序顺利运行,所以网络上出现了叫做Hack的方法,如下:
function GC():void {
try {
new LocalConnection().connect("foo");
new LocalConnection().connect("foo");
} catch (error:Error) {
//trace("GC OK!");
}
}
但这个方法遇到要被回收的是Loader对象时就不太起作用了(注意有个“太”字,在下面的demo里还是起作用的),然后找到在cs4以上版本中的Loader对象有unloadAndStop()方法,这样我在Loader对象从舞台移除时就把它删得“干干净净”,并强制进行垃圾回收(调用上面的GC方法),代码如下:
pictLdr.addEventListener(Event.REMOVED_FROM_STAGE,remove);
function remove(e:Event):void
{
pictLdr.removeEventListener(Event.REMOVED_FROM_STAGE,remove);
pictLdr.unloadAndStop();
pictLdr.unload();
pictLdr=null;
GC();
}
下面的demo中放了一个按钮,点击加载并添加一个swf文件到舞台,这个swf的右上角有一个关闭按钮,用来把自己从舞台移除,我不断的来回点这两个按钮,测试结果显示内存不会一直增加,会保持在一个水平线上波动,有图有真相,下图就是测试时任务管理器中显示的内存占用:
附上demo,下载
这个demo使用条件:
1.我是用cs5做的,所以请你用cs5打开;
2.播放器需要FlashPlayer10.1 r52,我是用这个测试成功的,试过用FlashPlayer10.0,不行;
3.请在beloaded.fla多放些图片什么的,放个10M左右吧,我上传上来的里面只有一张图(为了减少空间和流量,呵呵),太小了,无法看出内存变化情况。
function GC():void {
try {
new LocalConnection().connect("foo");
new LocalConnection().connect("foo");
} catch (error:Error) {
//trace("GC OK!");
}
}
但这个方法遇到要被回收的是Loader对象时就不太起作用了(注意有个“太”字,在下面的demo里还是起作用的),然后找到在cs4以上版本中的Loader对象有unloadAndStop()方法,这样我在Loader对象从舞台移除时就把它删得“干干净净”,并强制进行垃圾回收(调用上面的GC方法),代码如下:
pictLdr.addEventListener(Event.REMOVED_FROM_STAGE,remove);
function remove(e:Event):void
{
pictLdr.removeEventListener(Event.REMOVED_FROM_STAGE,remove);
pictLdr.unloadAndStop();
pictLdr.unload();
pictLdr=null;
GC();
}
下面的demo中放了一个按钮,点击加载并添加一个swf文件到舞台,这个swf的右上角有一个关闭按钮,用来把自己从舞台移除,我不断的来回点这两个按钮,测试结果显示内存不会一直增加,会保持在一个水平线上波动,有图有真相,下图就是测试时任务管理器中显示的内存占用:
附上demo,下载
这个demo使用条件:
1.我是用cs5做的,所以请你用cs5打开;
2.播放器需要FlashPlayer10.1 r52,我是用这个测试成功的,试过用FlashPlayer10.0,不行;
3.请在beloaded.fla多放些图片什么的,放个10M左右吧,我上传上来的里面只有一张图(为了减少空间和流量,呵呵),太小了,无法看出内存变化情况。
相关文章推荐
- 垃圾回收机制中,引入计数是如何实现的,内部原理是什么,怎么维持对象引用的
- Java虚拟机垃圾回收(一) 基础:回收哪些内存/对象 引用计数算法 可达性分析算法 finalize()方法 HotSpot实现分析
- Java虚拟机垃圾回收(一) 基础:回收哪些内存/对象 引用计数算法 可达性分析算法 finalize()方法 HotSpot实现分析
- java实现面向对象和javaScript基于对象的区别&java垃圾回收机制和其他编程语言的比较
- HotSpot的垃圾回收算法实现
- javascript基础(对象,对象属性,属性基本和引用数据类型,字面量创建对象,垃圾回收,属性的枚举)(十三)
- CLR探索系列:GC Heap架构及其实现(垃圾回收系列)
- as3中强制垃圾回收
- C++实现的垃圾回收机制
- 表示弱引用,即在引用对象的同时仍然允许垃圾回收来回收该对象。
- as3 开源类BulkLoader 实现的列队加载
- JAVA 对象被垃圾回收后其成员变量可用吗?
- Java虚拟机对象创建管理与垃圾回收知识整理与分析--Jvm虚拟机篇
- 图解JVM在内存中申请对象及垃圾回收流程
- JVM 垃圾回收机制( 一) 回收对象的判定
- [翻译]理解AS3的垃圾回收机制(上)
- Flash务实主义(五)——AS3的垃圾回收
- C++的垃圾回收——以对象管理内存
- 【005】【JVM——Hotspot算法实现存活对象判定和垃圾收集】
- 垃圾回收过程中的对象销毁-finalization