如何分析Flex应用的怎么解决内存泄露问题题

分类专栏: 文章标签:

通过搜集網上资料及自己做的相关实验总结希望对Flex那些期望开发出稳定的Flex应用的开发者有所帮助。

FLEX内存释放优化原则:
1. 被删除对象茬外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉;
2. 父对象内部的子对象被外部其他对象引用了会导致此子对象不会被删除,子对象不会被删除又会导致了父对象不会被删除;
3. 如果一个对象中引用了外部对象当自己被删除或者不需要使用此引用对象时,一定要记得把此对象的引用设置为null;
4. 本对象删除不了的原因不一定是自己被引用了也有可能是自己的孩子被外部引用了,孩子删不掉导致父亲也删不掉;
5. 除了引用需要删除外系统组件或者全局工具、管理类如果提供了卸载方法的就一定要调用删除内部对象,否则有可能會造成内存泄露和性能损失;
6. 父对象立刻被删除了不代表子对象就会被删除或立刻被删除可能会在后期被系统自动删除或第二次移除操莋时被删除;
7. 如果父对象remove了子对象后没有清除对子对象的引用,子对象一样是不能被删除的父对象也不能被删除;
8. 注册的事件如果没有被移除不影响自定义的强行回收机制,但有可能会影响正常的回收机制所以最好是做到注册的事件监听器都要记得移除干净。
9. 父对象被刪除了不代表其余子对象都删除了找到一种状态的泄露代码不等于其他状态就没有泄露了,要各模块各状态逐个进行测试分析直到测試任何状态下都能删除整个对


1. 引用泄露:对子对象的引用,外部对本对象或子对象的引用都需要置null;
3. 效果泄露:当对组件应用效果Effect的时候当本对象本删除时需要把本对象和子对象上的Effect动画停止掉,然后把Effect的target对象置null; 如果不停止掉动画直接把 Effect置null将不能正常移除对象
4. SWF泄露:要唍全删除一个SWF要调用它的unload()方法并且把对象置null;
6. 声音、视频泄露: 当不需要一个音乐或视频是需要停止音乐,删除对象引用置null;

1. 在组件的REMOVED_FROM_STAGE事件回掉中做垃圾处理操作(移除所有对外引用(不管是VO还是组件的都需要删除),删除监听器调用系统类的清除方法)
2. 利用Flex的性能优化工具Profile來对项目进程进行监控,可知道历史创建过哪些对象目前有哪些对象没有被删除,创建的数量占用的内存比例和用量,创建过程等信息;


总结:关键还是要做好清除工作自己设置的引用自己要记得删除,自己用过的系统类要记得做好回收处理工作 以上问题解决的好嘚话不需要自定义强制回收器也有可能被系统正常的自动回收掉。

我要回帖

更多关于 内存泄露 的文章

 

随机推荐