怎么分析Flex应用的内存泄露有关问题
随着Web 2.0技术的深入发展,Flex成为很多企业级应用的前端展示层。虽然Flex应用运行于FlashPalyer虚拟机之上,但是开发人员仍然会遇到一些内存泄露问题,那么如何分析和定位根源呢?IBM工程师王鹏最近撰文详细描述了检测Flex应用内存泄露的方方面面。 Flex采用ActionScript语言作为脚本语言,运行在FlashPlayer虚拟机之上,其垃圾回收机制概括如下: 在Flex应用开发过程中,主要存在两种泄露情况: 针对以上泄露问题,文章建议大家采用Adobe公司在Flex Builder 3中提供的Profiler工具来分析和定位泄露根源: 当然,凡事应以“预防为主”,所以作者最后总结了几点开发建议: 内存泄露一直是开发社区普遍关注的问题,即使在虚拟机时代,某些泄露问题仍然值得大家讨论和研究。 Flex 应用的对象在内存中被映射成树形结构。这很好理解,每个Flex应用总有一个Application的入口被称为根节点(Root),垃圾收集器从根节点开始遍历每个对象,对可达对象标记为“有效”(有一种例外就是弱引用)。而在这棵树之外的孤岛对象或者由于循环引用形成的孤岛对象集合被标记为“无效”,垃圾收集器会在合适的时间销毁这些无效对象,完成一次垃圾收集。而垃圾收集器是运行在虚拟机中的一个低优先级的守护进程,为了不影响性能,它只在必要的时候才运行。例如在向操作系统申请新内存空间的时候,发生异常的时候等等,因此内存并不是实时回收的。