内存回收机制试Q?br /> 通过~写试E序发现以下规律Qflash内存回收机制的一些特点:
1Q?nbsp; 自动内存回收旉不确定?/p>
2Q?nbsp; 当一个对象存在被其他对象引用Ӟq个对象不会被内存回收?/p>
3Q?nbsp; 当一个流对象被加载,q个被加载的对象及已l占用了内存?/p>
4Q?nbsp; 当一个可视化对象被声明,?没有d到画面是占用部分内存Q加到displayObject上后Q占用全部该对象对象全部内存?/p>
5Q?nbsp; 当加载重复对象,例如 加蝲100个同L XX.swf Q如果仅是加载,完成后没有引用,那么内存变化规律QL型的。如果某个时间内存回收。那么最后留在内存中的应该是大小q似于加??XX.swf Q比1个XX.swf 要大些)Q从此可以推理出Q要是不同的东西被加载,那么最后即便是没有内存漏洞Q在一定条件下常用的东西内存中可能也会臛_保存每一个不同的东西。经我测试好像是q样的?多了可能还会有新发现呢)
6Q?nbsp; 引用的包?/p>
1Q?nbsp; 对对象的存储Q?例如 使用一个数l保?某些对象Q那么数l不释放Q对象不可能释放
2Q?nbsp; 对事件的监听Q?例如 监听q程实际上是使用一个对象保存关键字和关键字兌的事Ӟ对事件关键字Q查扄后找出对应的兌function。以下是as2代码。As3 的EventDispatcher功能cM
var btnListener:Object = new Object();
btnListener.click = function() {
trace("haha")
};
bt1.addEventListener("click", btnListener);
使用removerEventer Ҏ定是要清除掉 处理关键字烦引和function 的对象。这样即清除掉了计数引用?/p>
3Q?nbsp; 强制回收方式Q自动内存回收时间不定Q用特D的ҎQ该Ҏ实际上触发一个错误引赯源回Ӟ使无用的不被计数器引用的都要被回收。(暂时不被使用的,没有引用的那个被自动回收保留的那个一个回收掉Q?/p>
ҎQ?
try {
trace("force a GC");
new LocalConnection().connect('foo');
new LocalConnection().connect('foo');
} catch (e:Error) {
trace(e.message);
}
}
一个例?假如 有个loader h加蝲url=xxxx.swf 的地址Q然后成功加?xxxx.swf, 10?Q每ơ成功后没有处理Q假设这时候自动回收没有调用,那么使用强制回收Q在debug模式下,会看到回收资源?/p>
[Unload SWF] xxxx.swf Q?0个这L输出?/p>
7Q?nbsp; ~写代码注意Q?/p>
1Q?nbsp; 无用的对象,没有引用
2Q?nbsp; 降低c设计之间的耦合度,注意对象传递引用的设计{?/p>
3Q?nbsp; 单例模式Q在合适的时候?/p>
4Q?nbsp; 事g循环嵌套造成多次执行Q或事g触发循环bug?/p>
5Q?nbsp; 对象重复加同L监听
Ҏ内存Ҏ制作了资源理cL?/p>
monitor XML 文g
1.客户端根据主配置文g加蝲 相关模块配置文gQ其中之一模块是monitor xml文g
在编译发布客LӞ可以不包括此文gQ在开发h员用时可以包括此文Ӟ监视?br />
Lq行情况Q那么这h助于使用更少的类Q节省资源?br />
依赖于XML配置体系的修改,打算客户端重构后实现?br />
Resource Monitor 资源监视c?br />
资源监视Q主要利用弱引用Q监视对象是否存在,对象加蝲的资源大可以获得,同过对象
是否存在来统计该所有对象资源大d?br />
l计q程中需要对资源cd划分Q这里涉及到cd如何划分Q以及改造过E中如何传递这
些资源的cd。因为具体改造就是通过一个公用函数获取资源,那么需要告诉这个函敎ͼ
什么地方(模块Q用Q以便统计?
工作量分?1~写Resource Monitorc,2修改代码中所有资源加载处?/p>
有一炚w要注意,q次dResource Monitorcȝ方式Q在以后重构后,加蝲调用的函数方
式可能都需要改变,设想通过服务来获取资源。那么这个服务的名称{信息自然会得到?/p>
使用Ҏ
weeklyLoader = new Loader();//E序中的loader加蝲 ,不需要改?/p>
RF.load(weeklyLoader,path,"人物囄");//d RF 源管理类Q采用静态方法访问,path 是资源的url,”人物囄”是模块或资源cd的名U。不需要传递回调方法?/p>
本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/cui55/archive/2008/03/31/2232705.aspx