1. 被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉;
2. 父对象内部的子对象被外部其他对象引用了,会导致此子对象不会被删除,子对象不会被删除又会导致了父对象不会被删除;
3. 如果一个对象中引用了外部对象,当自己被删除或者不需要使用此引用对象时,一定要记得把此对象的引用设置为null;
4. 本对象删除不了的原因不一定是自己被引用了,也有可能是自己的孩子被外部引用了,孩子删不掉导致父亲也删不掉;
5. 除了引用需要删除外,系统组件或者全局工具、管理类如果提供了卸载方法的就一定要调用删除内部对象,否则有可能会造成内存泄露和性能损失;
6. 父对象立刻被删除了不代表子对象就会被删除或立刻被删除,可能会在后期被系统自动删除或第二次移除操作时被删除;
7. 如果父对象remove了子对象后没有清除对子对象的引用,子对象一样是不能被删除的,父对象也不能被删除;
8. 注册的事件如果没有被移除不影响自定义的强行回收机制,但有可能会影响正常的回收机制,所以最好是做到注册的事件监听器都要记得移除干净。
9. 父对象被删除了不代表其余子对象都删除了,找到一种状态的泄露代码不等于其他状态就没有泄露了,要各模块各状态逐个进行测试分析,直到测试任何状态下都能删除整个对象为止。
内存泄露举例:
1. 引用泄露:对子对象的引用,外部对本对象或子对象的引用都需要置null;
2. 系统类泄露:使用了系统类而忘记做删除操作了,如BindingUtils.bindSetter(),ChangeWatcher.watch()函数时候完毕后需要调用ChangeWatcher.unwatch()函数来清除引用,否则使用此函数的对象将不会被删除;
类似的还有MUSIC,VIDEO,IMAGE,TIMER,EVENT,BINDING等。
3. 效果泄露:当对组件应用效果Effect的时候,当本对象本删除时需要把本对象和子对象上的Effect动画停止掉,然后把Effect的target对象置null; 如果不停止掉动画直接把 Effect置null将不能正常移除对象。
4. SWF泄露:要完全删除一个SWF要调用它的unload()方法并且把对象置null;
5. 图片泄露:当Image对象使用完毕后要把source置null;(为测试);
6. 声音、视频泄露: 当不需要一个音乐或视频是需要停止音乐,删除对象,引用置null;
内存泄露解决方法:
1. 在组件的REMOVED_FROM_STAGE事件回掉中做垃圾处理操作(移除所有对外引用(不管是VO还是组件的都需要删除),删除监听器,调用系统类的清除方法)
先remove再置null, 确保被remove或者removeAll后的对象在外部的引用全部释放干净;
2. 利用Flex的性能优化工具Profile来对项目进程进行监控,可知道历史创建过哪些对象,目前有哪些对象没有被删除,创建的数量,占用的内存比例和用量,创建过程等信息;
总结:关键还是要做好清除工作,自己设置的引用自己要记得删除,自己用过的系统类要记得做好回收处理工作。以上问题解决的好的话不需要自定义强制回收器也有可能被系统正常的自动回收掉
转自http://blog.sina.com.cn/turnertang
分享到:
相关推荐
在FLEX开发中,内存优化是提高应用程序性能和稳定性的重要环节。以下是一些关于FLEX内存释放和优化的关键知识点: 1. **引用管理**:确保当对象不再使用时,所有外部引用都被删除。如果一个对象被其他对象引用,...
FLEX内存释放优化原则,内存泄露解决方法,内存泄露情况
本文将针对“FLEX内存释放优化原则”进行深入探讨,帮助开发者掌握有效的内存管理技巧。 #### 二、核心优化原则 1. **删除对象前需通知系统** - 在删除对象之前,必须明确地告知系统即将进行的操作。这一步骤对于...
### Flex应用内存泄露的分析与诊断 #### 引言 Flex是一种用于构建和部署富互联网应用(RIA)的技术,它采用ActionScript语言作为脚本语言,并在Flash Player虚拟机(AVM)中运行。如同其他高级编程语言一样,AVM...
flex builder 优化
Flash、Flex和AIR是Adobe公司推出的RIA(富互联网应用)开发平台的重要组成部分。...开发者需要理解Flash Player的内存管理机制,并运用适当的编程技巧和工具来监控和优化内存使用,确保应用的性能和稳定性。
### Flex内存优化技巧详解 在开发Flex应用时,合理的内存管理是提高应用性能的...开发者需要时刻关注内存使用情况,并采取适当的措施来优化内存管理策略。通过遵循上述建议,可以显著提高Flex应用程序的性能和稳定性。
1. **Flex 3 Cookbook.pdf**:这本书提供了大量实用的代码示例,涵盖了Flex 3的各种开发技巧和最佳实践。从基础组件的使用到高级功能的实现,书中的实例可以帮助开发者快速解决实际问题,提高开发效率。学习此书,你...
Flex编译优化方法是提升开发效率的关键,尤其是在大型Flex项目中,编译时间长和Eclipse性能问题可能严重影响开发流程。以下是一些针对Flex编译慢的优化策略: 1. **关闭不必要的项目**:在Eclipse中,确保只开启...
【Flex瘦身优化】是针对Flex开发中遇到的项目体积过大的问题进行的一系列优化措施,主要是为了减小Flex应用程序的发布体积,提高加载速度和用户体验。以下是一套可行的优化方案: 1. **关闭编译调试信息**: 添加`...
这个“FLEX资料集合”可能包含的资源可能涵盖以上所有知识点,以及更深入的实战项目、最佳实践、性能优化等内容。对于初学者来说,通过这些资料可以系统地学习Flex开发,而对于有经验的开发者,则可以帮助他们提升...
Flex3程序的皮肤集合是一个资源库,包含了多种设计精美的Flex应用皮肤,这些皮肤能够显著地改变Flex程序的用户界面外观,提升...这个皮肤集合为Flex3开发者提供了一个丰富的资源库,帮助他们快速实现UI的个性化和优化。
Flex 应用内存泄露的分析与诊断主要集中在 Flex 应用程序中由于内存管理不当导致的问题。Flex 使用 ActionScript 语言编写,其运行环境在 FlashPlayer 的 ActionScript Virtual Machine (AVM) 中,该虚拟机包含一个...
14. **Flex性能分析**:使用Flex提供的性能分析工具(如FlexProfiler)来检测内存泄漏,找出潜在的问题点,并针对性地优化代码。 通过遵循上述建议,开发者可以有效地管理和减少Flex应用程序中的内存泄漏,从而提高...
Flex应用通常涉及大量的交互和动态数据处理,因此性能优化和内存管理是开发过程中的关键环节。以下是对Flex性能优化和内存查看的深入探讨: 1. **Flex性能优化**: - **代码优化**:减少不必要的计算,避免在循环...
### Flex性能优化全集 #### 引言 随着技术的发展,用户对于应用程序的要求越来越高,不仅在功能上有所期待,更注重应用的响应速度与流畅度。Adobe Flex 是一款用于构建和部署跨平台富互联网应用程序的强大工具,...
Flex内存泄露总结主要聚焦在Flash Player的垃圾回收机制和内存管理问题上,这对于优化Flex应用程序的性能至关重要。首先,我们要理解垃圾回收的基本原理。在Flash Player中,内存的释放工作由垃圾回收器负责,它是一...