AS3垃圾回收
来源:互联网 发布:全球股指行情软件 编辑:程序博客网 时间:2024/06/02 11:54
第一招:以静置动 (虽然显然是节约时间....貌似直接用方法反而有比这样更耗内存????)
如
for(var i=0;i<Array.length;i++) ==> for (var i=0,var j=Array.length;i<j;i++)
第二招:自生自灭 直接方法<实例方法调用(内存)<静态方法调用(时间)
一般强制内存回收 直接一个类:
/**
* 强制内存回收garbage collector
* @author telds
* @version 0.0.1
*/
package com.telds.utils {
import flash.net.LocalConnection;
public class GC {
public static function clear():void{
try {
var lc1:LocalConnection = new LocalConnection();
var lc2:LocalConnection = new LocalConnection();
lc1.connect('name');
lc2.connect('name2');
} catch (e:Error) {
}
}
public function clear():void{
try {
var lc1:LocalConnection = new LocalConnection();
var lc2:LocalConnection = new LocalConnection();
lc1.connect('name');
lc2.connect('name2');
} catch (e:Error) {
}
}
}
}
改进为
public interface IGC{
function gc():Boolean;
}
public class ClassA implements IGC{
public function gc():Boolean{
//TODO:
}
}
第三招:即来即去 (群体魔法....)
这招直接文字描述
定义一个接口,声明:获取实例、指针归零、销毁
定义一个类,声明:缓存字典/数组变量、指针变量、继承上述接口
用法:
声明任何变量 引用改类获取实例、当缓存无此实例,再声明。
第四招:有“借”有“还”
此招不提也罢,就是事件or字典用了就要还.......
===================================================自评========================
法1.就此
法2.灵活,不过直接在构造函数内制造单纯回收,请忽视
法3.群体,单体请忽视。
法4............
关于垃圾回收,我来解释下为什么LocalConnection可以实现垃圾回收
我来解释下为什么LocalConnection可以实现垃圾回收.
其实LocalConnection与垃圾回收是没有直接关系的.
这个做法的原理在于垃圾回收的时间尽管不确定,但是,只要程序抛出错误,就会运行一次垃圾回收器.这里使用LocalConnection两次connect同一个连接,第二次将发生运行时错误(#1034,LocalConnection已经连接上).于是就报错了.垃圾回收器自动运行.
至于为什么网上流传的版本都是LocalConnection,我个人觉得,可能是因为这个LocalConnection在AS3的应用中相对比较少出现,而且跟其他代码相比,这个运行时错误不容易与其他代码发生冲突.
//
我的方法在我的程序上测试过,在相同的内存申请中,第一次调用gc()后,内存好像没有被释放,但第二次进行相同的内存申请却并没有增加内存的用量,CPU使用也相对稳定,可以这样说,系统的确是回收了垃圾,但没有直接把回收的内存交还给操作系统,所以在第二次申请中内存用量没有上升。
而在没有用gc()的情况下,每调用一次都会增加内存用量,CPU占有也随之提高。
//
LocalConnection以及System.totalMemory这样的东西。
都是封装在底层的实现中。
如果是windows有相应的C++底层实现,官方没有公开这个资料自然也没有说明,不然就不叫Hack
但是我觉得这是一个不稳定的做法,因为针对不同的系统,相对的底层实现也不同。
try{ new LocalConnection().connect("foo"); new LocalConnection().connect("foo");}catch(e:*){}
他们据说是AVM2在某些错误发生的时候一定会启动一次GC,所以只要手动引发一次错误就可以了。
我也做了一下实验,new 出来100 个MovieClip,然后手动将每一个置NULL,然后再生成,反复10来次。 发现基本上垃圾对象只有在大于1000个左右才会被主动回收(也不一定是1000个,应该与movieClip大小有关系)。
然后我尝试在每次的dispose的结尾插入上述的代码,发现基本上每一次的dispose都会触发一次GC,的确是有用。但是这种手动触发的GC不知道在大型的项目中到底有没有实际用途,是否会导致一些其他的副作用,例如影响某些代码的运行之类的。
- as3 垃圾回收 [转]
- as3 垃圾回收
- as3垃圾回收
- AS3的垃圾回收
- AS3垃圾回收
- AS3垃圾回收机制
- AS3的垃圾回收
- AS3的垃圾回收
- AS3的垃圾回收
- 关于AS3的垃圾回收
- as3中强制垃圾回收
- AS3 hack形式强制执行垃圾回收
- Flash AS3 垃圾回收机制详解
- AS3垃圾回收及内存泄露处理
- 【Flash 务实主义】AS3的垃圾回收
- FLASH内存管理-AS3的垃圾回收
- AS3的内存泄漏与垃圾回收
- [AS-Hack]AS3中强制进行垃圾回收的方法
- C语言常用函数
- linux2.6.29 CFS调度详细分析
- android联系人过滤
- decorator装饰者模式
- Quarz调度框架--时间设置
- AS3垃圾回收
- 夜子:我在澳大利亚做Andriod, 阳光沙滩美女
- Linux内核模块编译基础
- C语言标准库函数bsearch 详解
- C数组复习
- android 收藏集锦
- Java代码书写规范
- 算法能预测未来24小时你身在何处
- cocos2d-x学习笔记(11)--坐标系