`

Flex 内存处理的方法

    博客分类:
  • flex
阅读更多
1.当任何对象unload后,flash player不会自动的回收内存,机制本身判断应该是判断周期时间内增长内存量而去自动回收,当然也你可以通过System.gc() 去主动回收。但是这样回收是无法回收干净的。
2. flash player内存分配有两种机制,一种是静态的,当前我发现只用lite才有这个支持,他对内存管理比较严格,把独立的player都放里面。 第二种就是动态的,这个方式缺点就是产生内存散片,这个散片必须要根player over它才会全部释放,否则,散片部分一直增长。

FLEX内存释放优化原则: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来对项目进程进行监控,可知道历史创建过哪些对象,目前有哪些对象没有被删除,创建的数量,占用的内存比例和用量,创建过程等信息;

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

相关推荐

    Flex内存管理及相关内容

    flex内存管理机制 垃圾回收 弱引用 FLEX内存释放优化原则 1. 被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉; 2. 父对象内部的子对象被外部其他对象引用了,会导致此子对象不会被删除,...

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    MessageBrokerServlet 是真正处理 Flex 远程调用请求的 Servlet,我们需要将其映射到指定的 URL: 清单 5. 定义 Flex servlet <servlet> <servlet-name>messageBroker</servlet-name> <servlet-class>...

    Flash,Flex和AIR应用开发内存监测及优化技巧

    Flash,Flex和AIR应用开发内存监测及优化技巧 内容摘要  Flash Player 是如何分配内存的?  Flash Player 是如何完成垃圾回收的?  Flash Player 是如何优化渲染显示的?  你该如何处理以下问题:  事件监听...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    MessageBrokerServlet 是真正处理 Flex 远程调用请求的 Servlet,我们需要将其映射到指定的 URL: 清单 5. 定义 Flex servlet <servlet> <servlet-name>messageBroker</servlet-name> <servlet-class>flex....

    flex3的cookbook书籍完整版dpf(包含目录)

    flex3的cookbook书籍完整版dpf(包含目录),目录是我花了两个多小时自己整理的,希望对大家有帮助。 目录: 第一章.Flex与ActionScript基础(3) ... 使用Flex Builder 3的Memory Profiling查看内存快照 第二十六章...

    BindIt.exe

    软件生成的程序可通过电脑直接运行,也可将程序导入 KingFisher Flex 的内存后独立运行 ● KingFisher Flex 使用一种由聚丙烯制成的一次性塑料耗材,具有极低的生物分子吸附性,而且优化的底部结构可有效增加磁珠的...

    gsoap 2.8 (SOAP/XML 关于C/C++ 语言的自动化实现工具内附 CSharp webservice例子,及GSOAP client和server例子)

     境变量调用远程方法或处理请求信息)。  4 准备工作  要开始用gSOAP创建一个web服务应用, 你需要:  一个C/C++编译器.  拥有根据操作系统平台创建的可执行的gSOAP的stdsoap2(windows下为stdsoap2.exe)编译器...

    ActionScript开发技术大全

    24.1.2内存使用 522 24.1.3播放器控制 523 24.1.4剪贴板 523 24.1.5System类功能示例 524 24.2获取系统信息 526 24.2.1使用Capabilities类 527 24.2.2本地机器特性检测示例 528 24.3输入法编辑器IME控制 530 24.3.1...

    MTHawkeye:适用于iOS的性能分析调试辅助工具。 (内存泄漏,OOM,ANR,硬停止,网络,OpenGL,时间配置文件...)

    开发阶段,专注于开发和调试帮助,及时发现问题,并提示开发人员进行处理。 测试阶段,重点是尽可能从测试用例收集性能数据,以生成自动测试分析报告。 在线阶段,重点关注我们自己的业务需要的绩效数据,但是第...

    nom-tutorial:使用nom 5解析的教程

    Nom具有Rusts强大的键入和内存安全性的优点,并且通常比替代方法更具性能。 学习nom是Rust工具箱中的一项有价值的补充。基本原理Nom的官方文档包括一些简单的示例(例如,如何解析十六进制RGB颜色代码)和非常复杂...

    asp.net知识库

    使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标...

    wap网站和wap+2.0教程.

    WAP的会话系统可以处理间歇覆盖(intermittent coverage),同时可在无线传输的各种变化条件下进行操作。  WML和WML Script用于制作WAP内容,这样可最大限度地利用小屏幕显示。WAP的内容可从一个最新式的智能电话或...

    VMware Workstation Pro 12.0.0 Build 2985596 - 64bit [ENG] [Serial]

    Workstation 12 Pro 是借助您的现有 Windows 或 Linux PC 评估和测试 Windows 10 的最佳方法。使用 Workstation“虚拟机向导”,您只需几个简单的步骤即可从磁盘或 ISO 映像在虚拟机中轻松地安装 Windows 10。借助 ...

Global site tag (gtag.js) - Google Analytics