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...
FLEX内存释放优化原则,内存泄露解决方法,内存泄露情况
以下是一些解决Flex内存泄漏的关键点: 1. **删除无用对象**:确保在不再需要对象时正确地删除它们,避免它们在内存中驻留。这包括删除事件监听器、解除绑定数据等。 2. **事件监听器管理**:事件监听器是常见的...
Flex 应用内存泄露的分析与诊断主要集中在 Flex 应用程序中由于内存管理不当导致的问题。Flex 使用 ActionScript 语言编写,其运行环境在 FlashPlayer 的 ActionScript Virtual Machine (AVM) 中,该虚拟机包含一个...
#### Flex内存泄露的原因 尽管AVM提供了垃圾收集机制,但Flex应用依然可能遭遇内存泄露问题。主要原因是对象引用关系导致垃圾收集器误判某些对象仍处于活动状态。具体而言: 1. **对象引用不当:** 当某个对象实际...
Flex内存泄露总结主要聚焦在Flash Player的垃圾回收机制和内存管理问题上,这对于优化Flex应用程序的性能至关重要。首先,我们要理解垃圾回收的基本原理。在Flash Player中,内存的释放工作由垃圾回收器负责,它是一...
本文旨在深入探讨Flex内存管理的基本概念、垃圾回收机制以及如何预防内存泄漏等问题。 #### 二、Flex内存管理概述 Flex是Adobe公司推出的一款用于构建跨平台的富互联网应用程序(RIA)的开源框架。它基于ActionScript...
标题 "FLEX内存不足,无法使用设计模式的解决办法" 描述了在使用Adobe Flex开发工具时遇到的一个常见问题,即内存不足导致无法使用设计模式。这个问题通常在开发者尝试打开或编辑复杂的Flex项目时出现,因为设计模式...
标题 "flex 性能,查看内存" 暗示了我们正在讨论Adobe Flex,这是一个用于构建富互联网应用程序(RIA)的开源框架,基于ActionScript和Flash Player或Adobe AIR。Flex应用通常涉及大量的交互和动态数据处理,因此...
在IT行业中,内存泄漏是开发者面临的一个重要问题,特别是在使用像Flex这样的技术时。本篇内容将深入探讨Flex中的内存泄漏及其原因,以及Flash Player的内存管理机制。 首先,我们来了解一下什么是内存泄漏(Memory...
在Flex开发中,内存泄露是一个常见的问题,它会导致应用程序占用过多的内存,影响性能甚至导致程序崩溃。本文将深入探讨Flex中可能导致内存泄露的一些常见原因,并提供相应的解决方案。 首先,事件监听是导致内存...
### Flex内存管理及相关内容 #### 一、Flex与ActionScript中的内存管理机制 Flex作为一种用于构建RIA(Rich Internet Applications)的应用框架,其背后的编程语言ActionScript(简称AS)支持垃圾回收(Garbage ...
本篇文章将深入探讨Flex虚拟机的内存管理机制以及如何预防和处理内存泄漏问题。 内存管理在任何软件开发中都至关重要,尤其是在动态语言如ActionScript中。Flex虚拟机采用了一种自动垃圾回收(Garbage Collection, ...
解决flex 4.6内存不足myeclipse中无法加载设计模式 1 解决flexbuilder4无法加载设计模式内存不足的方法为先新建一java工程,再新建flex项目 2(1). 调整FlashBuilder eclipse.ini 编辑 {FlashBuilder 安装路径}/...
【Flex面试题】Flex面试题主要涵盖Flex的基础概念、开发框架、MVC模式的应用、内存管理、垃圾回收机制、前端性能优化以及与后端通信等多个方面。以下是对这些知识点的详细解析: 1. AS2与AS3的区别: AS2...
内存问题可能同样影响到使用APE的Flex应用,解决方案与上述相同。 压缩包子文件的文件名列表中的"3.2"和"3.3"可能是版本号,暗示了问题可能出现在特定的Flex SDK或IDE版本中。检查和升级到最新版本可能有助于解决...
在本专题中,我们将深入探讨如何使用SuperMap iClient 6R for Flex来创建一个基于内存数据的等级符号专题图。SuperMap iClient是一款强大的GIS(地理信息系统)客户端开发组件,它提供了丰富的地图操作和分析功能,...