AS3 内存回收胡乱总结

 

我并没有什么特别新奇特的东西,只是总结一下flex里面对于内存回收的一些测试结果

你读起来也许会感觉啰嗦,因为我面向的不是高手,怕说不明白,大家见笑了,另外我也只是个菜鸟,想扔砖的随便扔,我只是希望这点东西能对大家有点用处

猫粮的帖子地址在这

http://flash.9ria.com/thread-367-1-1.html

帖子放在这里,测试结果进行记录

 

private function enterFrameHandler():void
{
var o:Object = new Object();
}

 

把这个变量 o 无论是否置空,内存都可以被回收,大概是因为它已经出了作用域了,所以直接销毁

 

加载外部文件,不关闭,内存回收

private function enterFrameHandler():void
{
var flvplay:VideoDisplay = new VideoDisplay();
this.addChild(flvplay);
flvplay.source = "phone.flv";
flvplay.play();
MyGC.GC();
}
我的测试是,内存是回收的,但是有其他疑问
   private function enterFrameHandler():void
   {
    var  flvplay:VideoDisplay=new VideoDisplay();
    this.addChild(flvplay);
    flvplay.source="phone.flv";
    flvplay.play();
    flvplay.close();
    this.removeChild(flvplay);
    flvplay=null;
    MyGC.GC();
   }
如果有MYGC.GC()这行代码,如果没有他,就会出现:
舞台移除,变量为空,内存还是无法释放,好像是因为它的source问题。如果不设置source,那就不会出现无法回收了。
但是,
1.如果在
flvplay.close()这行代码后,加入 flvplay.source="",或者flvplay.source = null,这样,就可以在profile里面强制回收内存,但是如果不强制,videoPlayerNetStream的Instances就会一直增加;
2.如果根本不加flvplay.source置空的代码,那么内存只能强制回收一部分呢,并且会越积累越多,总之是泄露了。

 

但是我实在不明白GC函数里面只是有两个LocalConnection,为什么他们可以让flvplayer的内存回收呢。。。。。o(╯□╰)o

根据帖子的观点,静态函数GC就是回收内存的。。但是不懂为什么LocalConnection可以回收内存。。奇葩

 

接着测试

如果一个可视化对象里面注册了侦听函数,那么remove掉,效果和删除侦听后是一样的,任务管理器发现,他们会不停的增加,然后停止到一个程度,从profile来看,强制回收内存也是可以成功的,如果我们在后面加上变量为空的代码,效果还是一样,除了作用域,FP也就回收了,不用我们自己YY,不过我感觉删掉那些侦听函数会比较好一些,因为如果你注册的是enterframe事件,强制回收内存总会有那么几个回收不了。

另外,如果在可视化对象里面放timer,timer还在活动,你没有让它close就remove掉了view对象,那就真的内存泄露了,我在的公司开发SNS应用,timer这种东西还是可以用的,我们会在移除时候把timer stop()并且设为null,(当然现在看来不用设置为空的,stop就可以了,但这是算是一种编程规范吧)。我朋友在一个做MMO的公司,他们直接把timer列入黑名单,属于不可以使用的东西。。。

写的很乱。。我语文不好,希望大家看了能有点帮助。。我顺便也给自己做点记录

//=========
今天又测试了BIndingUtility
用于模型的类
绑定了模型层的可视化对象 MyObject

主文件了
测试结果
即使它被删除了,它依然存在。。。。所以bindingUtil虽然方便,但是最好别乱用。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值