原因:
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的信息
提供一定的控制能力内存剪切板、摄像头、麦克风等