今天对自己写的东西进行测试,一直对其内存占用耿耿于怀,一直运行该SWF文件,我看到内存检测一直在上升,就算不按任何按钮,不作任何动作,内存也是逐渐的上升。我检查了一遍又一遍,没用的变量我也null掉了,不用的侦听我也remove掉了,不该存在的显示对象也remove掉了,可是内存还是没有被释放出来。
GC这东西,一直为AS开发者所诟病,GC什么时候执行,开发者完全不能控制,下一秒?下一分钟?下一个钟?恐怕等到GC自动执行的时候,程序早就内存泄露崩溃了。
google一下,发现GC原来是可以手动触发的,不过是通过某些非官方认可的手段
以下是核心代码:
try
{
new LocalConnection().connect("run GC");
new LocalConnection().connect("run GC");
}catch(error : Error)
{ }
上述代码写在一个函数中,或者封装成工具类的静态方法,用的时候调用该方法就好了,每调用一次,GC就会强制执行一次,经测试,这种方法能很好的控制内存的释放,非常有用。
原理:GC在程序抛出错误的时候,会自动执行一次,该方法就是故意抛出一个错误,让GC自动执行一次,catch error又会让程序得以继续运行。
注意:虽说GC强制执行能释放内存,但会耗CPU,据说这一动作耗时200 ms(具体我还没有验证),如果该说法属实,200 ms积累起来还是一个颇大的延时,所以手动触发GC要谨慎。
资料来源:http://bbs.9ria.com/viewthread.php?tid=234&extra=&page=1(回复很精彩)


