从Flash Player 9.0 开始,在使用Flash/Flex开发大型的在线应用的时候,一直存在着内存无限制增长的问题。
如网络游戏,需要在多个场景间切换,每个场景既为一个swf,当一个swf unload后,它的内存并没有释放,导致内存无限制增长。
具体的原因很多,见下文:
http://www.gskinner.com/blog/archives/2008/04/failure_to_unlo.html
Flash Player 10.0开始,加入了新的API,unloadAndStop,此API在一定程度上对该问题有了改善,但并没有彻底解决,对于复杂的大型应用连 Flash Support都不能给出满意的答复
今天测试了一下 Flash Player 10.1,发现此问题已经得到了很好的解决。
http://labs.adobe.com/downloads/flashplayer10.html
场景间的反复切换,内存保持在一个水平线上,不再出现爆发式增长
Flash Player GC采用 引用计数方式来管理对象的释放。在每次对象创建前进行GC回收。具体的GC工作原理可以参阅此链接中的PPT。
http://blogs.adobe.com/aharui/2007/03/garbage_collection_and_memory.html