写点什么

如何分析 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:312525
用户头像

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

关注

评论

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

润开鸿重磅首发基于“RISC-V+OpenHarmony+星闪”的“鸿锐”AI开发平台

坚果

润开鸿

Dash for Mac 最好用的API文档工具

Rose

电影院需要采购堡垒机吗?为什么?

行云管家

网络安全 堡垒机 电影院

面试官:谈谈你对线程池拒绝策略的理解?

王磊

从开源大模型工具Ollama存在安全隐患思考企业级大模型应用如何严守安全红线

星环科技

数据安全 #大模型

APP蓝牙通信的开发

北京木奇移动技术有限公司

APP开发 软件外包公司 蓝牙通讯

出租屋管理系统(源码+文档+讲解+演示)

深圳亥时科技

开发HarmonyOS NEXT版五子棋游戏实战

威哥爱编程

游戏 HarmonyOS ArkTS HarmonyOS NEXT

ON1 Photo RAW MAX 2024 for Mac 中文激活版 专业的照片编辑管理器

Rose

Axure RP 9密钥及安装教程分享-Axure RP 9下载中文版

Rose

数字化档案管理系统建设方案(Word资料)

金陵老街

数字化 电子档案 电子会计档案

后 DeepSeek R1 时代:从资本壁垒到技术普惠

Baihai IDP

程序员 AI LLMs Baihai IDP DeepSeek

震撼发布!CodeArts 解锁全新技能,鸿蒙应用与元服务开发轻松拿捏

华为云开发者联盟

harmoyos

重磅官宣!荣耀远航计划 | 2025年激励政策持续升级,报名进行中

荣耀开发者服务平台

折叠屏 AI智能体 应用市场 荣耀HONOR 荣耀远航计划

Echarts与Vue3中获取DOM节点可能出现的异常错误

秃头小帅oi

Mouse And Keyboard Recorder mac(自动记录记录鼠标点击和按键)v54.9

Rose

通过Milvus内置Sparse-BM25算法进行全文检索并将混合检索应用于RAG系统

阿里云大数据AI技术

大数据 向量检索 Milvus rag

管理会计数据融合专题论坛,在京成功召开!

用友智能财务

AI 财经 会计

APP蓝牙通讯的异常处理

北京木奇移动技术有限公司

软件外包公司 APP外包 蓝牙通讯

管理 Android 设备从未如此简单! MacDroid Pro 来帮你

Rose

25年浙江等保测评机构名单汇总

行云管家

网络安全 等保 等保测评

APP的USB通讯开发

北京木奇移动技术有限公司

APP开发 软件外包公司 蓝牙开发

成功案例丨开发时间从1小时缩短到3分钟:如何利用历史数据训练AI模型,预测设计性能?

Altair RapidMiner

机器学习 AI 制造业 仿真 altair

Noir – Dark Mode for Safari (Safari 扩展程序) v2025.1.2激活版

Rose

NewTek LightWave 3D for mac(3D动画制作软件)v2024.1.0激活版

Rose

DockView for Mac(Dock窗口预览工具)v1.4激活版

Rose

荣耀远航计划丨【AI服务生态】激励解读

荣耀开发者服务平台

AI Agent AI 智能体 荣耀HONOR 荣耀远航计划

案例 | 期货交易所建设立体式身份认证体系

芯盾时代

双因子认证 iam 多因素身份验证

经典音频效果器合集 FabFilter Total Bundle 2019下载安装

Rose

foobar2000汉化版 高级音频播放器

Rose

Set A Light 3D Studio for Mac(3D摄影棚布光工具)v2.58d永久试用版

Rose

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