写点什么

如何分析 Flex 应用的内存泄露问题?

  • 2010-10-26
  • 本文字数:1101 字

    阅读完需:约 4 分钟

随着 Web 2.0 技术的深入发展,Flex 成为很多企业级应用的前端展示层。虽然 Flex 应用运行于 FlashPalyer 虚拟机之上,但是开发人员仍然会遇到一些内存泄露问题,那么如何分析和定位根源呢?IBM 工程师王鹏最近撰文详细描述了检测Flex 应用内存泄露的方方面面。

Flex 采用 ActionScript 语言作为脚本语言,运行在 FlashPlayer 虚拟机之上,其垃圾回收机制概括如下:

Flex 应用的对象在内存中被映射成树形结构。这很好理解,每个 Flex 应用总有一个 Application 的入口被称为根节点(Root),垃圾收集器从根节点开始遍历每个对象,对可达对象标记为“有效”(有一种例外就是弱引用)。而在这棵树之外的孤岛对象或者由于循环引用形成的孤岛对象集合被标记为“无效”,垃圾收集器会在合适的时间销毁这些无效对象,完成一次垃圾收集。而垃圾收集器是运行在虚拟机中的一个低优先级的守护进程,为了不影响性能,它只在必要的时候才运行。例如在向操作系统申请新内存空间的时候,发生异常的时候等等,因此内存并不是实时回收的。

在 Flex 应用开发过程中,主要存在两种泄露情况:

  • 显式引用:由于表达式赋值或者对象参数传递等原因,已经“无用”的对象被保持引用,导致虚拟机无法正常回收。
  • 隐式引用:由于事件监听注册等操作,导致对象之间存在引用,产生泄露风险。

针对以上泄露问题,文章建议大家采用 Adobe 公司在 Flex Builder 3 中提供的 Profiler 工具来分析和定位泄露根源:

  • 内存快照法:通过对于相同操作做反复内存快照(Profiler 工具支持)比较,找出持续增加的对象实例,就可能发现泄露根源。
  • 游荡对象法:当 Flex 应用特别复杂时,可以利用 Profiler 工具中的“Find Loitoring Objects”查找游荡对象,比较不同状态转换之间的对象变化,可能会发现泄露的对象。

当然,凡事应以“预防为主”,所以作者最后总结了几点开发建议:

  1. 对于显式引用,要尽量减少对临时对象的引用,尤其是全局变量、静态变量、使用单例模式创建的变量对临时变量的引用。这些变量包含 stage、systemManager、application、MVC 框架中 Model 和 Controller,还有以 Manager 命名的对象等等。另外,临时变量本身要尽量做到高内聚性,对象内部尽量减少对外部对象尤其是全局对象的依赖。
  2. 对于隐式引用,使用弱引用方式注册事件监听器,将最后一个参数 useWeakReference 设置为 true:a.addEventListener(“Leak”, b.leakHandler, false, 0, true); 这样做的结果是垃圾回收器在做标记时,会忽略 a 对于 b 的引用,如果 b 没有被其他对象引用,垃圾回收器就把它标记为“无效”进而回收,从而避免内存泄露。

内存泄露一直是开发社区普遍关注的问题,即使在虚拟机时代,某些泄露问题仍然值得大家讨论和研究。

2010-10-26 01:312221
用户头像

发布了 501 篇内容, 共 260.6 次阅读, 收获喜欢 61 次。

关注

评论

发布
暂无评论
发现更多内容

Apple Remote Desktop for Mac(远程管理软件)v3.9.8中文激活版

小玖_苹果Mac软件

After Effects 2025 for mac(ae2025视频后期优化处理)v25.1.0中文激活版

小玖_苹果Mac软件

Java程序员春招面试宝典,结合了30多家大厂面试难点的Java面试

采菊东篱下

编程 计算机 java面试

GitHub中文社区上的最火的Java面试八股文手册限时开源

架构师之道

编程 计算机 java面试

三文带你轻松上手鸿蒙的 AI 语音 01-实时语音识别

万少

鸿蒙

Weather Dock for Mac(天气预报)v5.6.2中文激活版

小玖_苹果Mac软件

Dato for Mac(菜单栏时钟软件)v5.4.3激活版

小玖_苹果Mac软件

bc 与 hbm 一致性比对

地平线开发者

自动驾驶 算法 地平线征程5

明年工作计划怎么写

爱吃小舅的鱼

工作计划 工作计划管理 工作计划软件

征程 6X OTA升级端介绍

地平线开发者

自动驾驶 算法 地平线征程5

生产计划管理的思路和方法

爱吃小舅的鱼

生产计划

2024金九银十热门考点Java面试1000题升级补录,不管面试还是跳槽都能有帮助

采菊东篱下

编程 计算机 java面试

Steinberg SpectraLayers Pro for Mac v11.0.50 专业音频编辑和修复软件

小玖_苹果Mac软件

SponsorBlock for YouTube for Mac(跳过youtube赞助商广告)v5.10.3 激活版

小玖_苹果Mac软件

Aiseesoft iPhone Unlocker for Mac(苹果设备解锁工具)v2.0.60激活版

小玖_苹果Mac软件

不装双系统!无需 Windows虚拟机也能在Mac上畅玩《黑神话:悟空》!

阿拉灯神丁

steam 苹果软件精选 CrossOver Mac下载 3A游戏 黑神话悟空

科大讯飞p30 5G版和p30区别对比

妙龙

科大讯飞 学习机

Lazada Item_review API接口的开发应用与收益

科普小能手

电商 跨境电商 API 接口 API 测试 lazada API

2000道面试必问的Java面试八股文及答案整理(2025版)

Summer

Java 程序员 面试 架构师 大厂

Topaz Gigapixel AI for Mac(AI图片无损缩放工具)v8.1.0激活版

小玖_苹果Mac软件

2025年最新Java八股文面试题,面试应该是够用了(吊打面试官)

Summer

Java 程序员 面试 架构师 大厂

三文带你轻松上手鸿蒙的 AI 语音 02-声音文件转文本

万少

鸿蒙

软件开发中 Bug 为什么不能彻底消除

爱吃小舅的鱼

bug bug管理

科大讯飞AI学习机T30 Ultra 参数 功能介绍

妙龙

科大讯飞 学习机

Fig Player - play mp4 mkv mp3 for Mac(媒体播放器)v1.3.16 激活版

小玖_苹果Mac软件

FabFilter Total Bundle 2024 for Mac(音频插件合集)v2024.12.11 直装激活版

小玖_苹果Mac软件

鸿蒙NEXT开发案例:经纬度距离计算

zhongcx

不愧是阿里巴巴内部“Java成长笔记”,差距不止一点点

架构师之道

编程 java面试

Ableton Live 12 Suite for Mac v12.1.5 专业的音乐制作工具

小玖_苹果Mac软件

CRM客户管理系统有什么缺点

爱吃小舅的鱼

CRM客户管理系统

如何跟进项目

爱吃小舅的鱼

项目管理 管理项目

如何分析Flex应用的内存泄露问题?_Java_崔康_InfoQ精选文章