Flex学习笔记(十三)——内存泄露

来源:互联网 发布:mac地址长度为多少位 编辑:程序博客网 时间:2024/05/21 14:44

原因:

1.       某些对象不被全局对象引用时,忘记从全局对象清除对他们的引用,如Stage、主Application、类的静态成员变量以及使用单例模式创建的实例

2.       无限次触发的Timer

3.       隐式方式建立的对象引用,如为对象添加事件监听器。如 a.addEventListener(Event.Type,b.listenerFunc).如果a是全局对象如stage,则b对象永远不会被垃圾回收,不过以下三种addEventListener不会内存泄漏

1)  弱引用注册监听器,即第5个参数设为true

2)  自引用方式,如

This.addEventListener(type,this.handlerFunc);

3)  子对象引用

This.addEventListener(type,this.parent.handlerFunc);

方法处理:

         停止已经启动的timer

         对组件应用了Effect,当删除组件时,先停止效果,再把效果的target属性设为null

         使用ChangeWatcher.watch()后调用ChangeWatcher.unwatch()来清除引用

         使用ModuleLoaderde loadModule后,使用unLoadModule将其卸载,并将该模块对象的引用置为null

         使用Graphics画图,将不再显示的图像使用clear()清除

         Image使用完后,将source设置为null

         当不需要音乐或视频时,停止音乐、删除对象、将引用设置为null

分析工具——profile  as

                   点击【强制垃圾回收】,如果确定已经完全移除和清除对象的引用,则活动对象列表中的类会减少

                   累计实例数代表总共多少实例被创建,实例数代表当前存在的对象实例。如果运行Force GC后累计实例数和实例数数量相同,则可能存在内存泄漏。

                   “内存使用情况”中灰线和黑线从不分离,则说明有内存泄漏。

Flash.system

         提供了一些系统类,帮助开发者获取一些Flash的信息

         提供一定的控制能力内存剪切板、摄像头、麦克风等

原创粉丝点击