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来对项目进程进行监控,可知道历史创建过哪些对象,目前有哪些对象没有被删除,创建的数量,占用的内存比例和用量,创建过程等信息;
总结:关键还是要做好清除工作,自己设置的引用自己要记得删除,自己用过的系统类要记得做好回收处理工作。 以上问题解决的好的话不需要自定义强制回收器也有可能被系统正常的自动回收掉。
相关推荐
### Android内存泄漏详解 #### 一、资源对象未关闭导致的内存泄漏 在Android开发过程中,内存泄漏是一个常见的问题,特别是在资源对象管理方面。资源对象如`Cursor`、文件流等,通常会在内部使用缓冲机制来提高...
### Android内存管理与系统资源获取方法 #### 一、通过读取特定文件获取系统资源信息 在Android系统中,为了方便开发者对系统状态进行监控,提供了多个特殊文件,通过读取这些文件,可以获取到系统的内存、CPU等...
1. **系统调用界面**:UNIX系统提供了系统调用作为程序与操作系统交互的主要方式,如打开文件、读写文件、创建进程、管理内存等。这些调用构成了操作系统对外的基础服务。 2. **标准C库函数**:除了系统调用,标准C...
与软件团队的密切沟通至关重要,以确保内存、接口数量和类型等细节满足要求。 2. **原理图设计**: 原理图设计应充分利用芯片厂商提供的参考设计,但也要在此基础上进行创新。电源、时钟和芯片间的互连是核心部分...
先直接摘抄一段 wikipedia 上的介绍。 虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分...
这样可以减少内存占用,提高代码重用,并简化软件维护。在Windows系统中,DLL文件通常包含函数定义、数据结构和资源。 1. **加载DLL**:程序可以在运行时动态地加载DLL,而不是在编译时静态链接。这使得程序可以...
这篇博客是关于《C和指针》一书的摘抄整理笔记,主要涵盖了C语言中的基本概念和关键知识点。以下是笔记中的主要内容: 1. 位操作技巧:在C语言中,位操作是直接操作二进制位的一种方式。`value |= 1 表示在`value`...
通过使用适当的数据结构,可以提高程序的运行效率,降低内存占用,优化算法设计。 3. **计算机网络**:计算机网络是由多台地理位置分散的计算机和通信设备通过通信线路连接,按照网络协议实现资源共享和信息传递的...
一般来说在 Python 中,为了解决内存泄漏问题,...下面摘抄一点文档内容如下: Some common situations that may prevent the reference count of an object from going to zero include: circular references betwe
Builder负责组装电脑的各种组件(如CPU、内存、硬盘等),而Director则指导如何根据用户需求来组合这些组件,形成最终的电脑产品。 总的来说,设计模式如Abstract Factory和Builder是软件设计中的宝贵工具,它们...
1. **计算机基础知识**:这部分内容会讲解计算机的发展历史、基本组成部分(如CPU、内存、硬盘、输入输出设备等)以及它们的功能。此外,还会介绍计算机系统的层次结构,包括硬件、操作系统、软件和用户。 2. **...
在C语言中,指针是其强大的特性之一,它允许我们直接操作内存。本文将深入探讨指针解引用、结构体中的成员定位、通过指针传递参数的安全性、位段的使用及其潜在问题。 首先,关于指针解引用,这是C语言中常见的操作...
本文主要探讨了与C语言指针相关的几个关键知识点,包括`memxxx`函数、结构成员的访问以及结构自引用。 首先,`memxxx`函数是一组用于处理内存块的函数,它们扩展了传统的字符串处理函数的功能,能够处理包含NUL字节...
查询可用资源相关接口:提供了获取CPU和内存容量的接口。 垃圾回收相关接口:提供了触发垃圾回收任务、删除垃圾回收任务和查询垃圾回收任务等接口。 许可证相关接口:提供了获取许可证信息、获取许可证容量和重新...
使用约束部分强调了文档的版权信息,说明了文档内容的使用权限和限制,如不得擅自摘抄、复制和传播,除非得到华为公司的书面许可。文档还提到了商标声明,指出文档提及的商标或注册商标归各自所有者所有。 在基础...
2. **sizeof操作符**:`sizeof`是一个非常有用的运算符,它能够返回一个类型或变量所占的内存大小。对于数组,`sizeof(array)`返回整个数组的字节数,而`sizeof(array[0])`则返回单个元素的字节数。通过这两个值的...
综上所述,通过学习《Linux系统编程第六章》,读者不仅能够了解到关于Linux文档工程拷贝许可证和GNU通用公共许可证的相关规定,还能深入掌握Linux下的编程技巧,包括内存管理、进程控制、PCI编程、内核模块开发等...
《大规模分布式系统架构与设计实战》从作者的实战经验出发,深入浅出地讲解了如何建立一个Hadoop那样的分布式系统,实现对多台计算机CPU、内存、硬盘的统一利用,从而获取强大计算能力去解决复杂问题。一般互联网...
这不是一本空谈概念、四处摘抄的书,这本书包含了大量精炼示例,手把手教你掌握分布式核心技术。 本书主要内容 分布式并行计算的基本原理解剖; 分布式协调的实现,包括如何实现公共配置管理,如何实现...