您现在的位置: 精品资料网 >> 行业分类 >> IT行业 >> 资料信息

Flex应用内存泄露的分析及其诊断(pdf 9页)

所属分类:
IT行业
文件大小:
886 KB
下载地址:
相关资料:
内存,诊断
Flex应用内存泄露的分析及其诊断(pdf 9页)内容简介
Flex应用内存泄露的分析及其诊断内容提要:
FlashPlayer虚拟机的垃圾回收机制:
垃圾收集器采用计数法或标记法来查找需要清除的对象。计数法由于无法检测循环引用的对象,现在已经很少采用了。重点谈一下标记法。Flex 应用的
对象在内存中被映射成树形结构。这很好理解,每个 Flex 应用总有一个 Application 的入口被称为根节点(Root),垃圾收集器从根节点开始遍历每个对
象,对可达对象标记为“有效”(有一种例外就是弱引用,后面的章节详谈)。而在这棵树之外的孤岛对象或者由于循环引用形成的孤岛对象集合被标记
为“无效”,垃圾收集器会在合适的时间销毁这些无效对象,完成一次垃圾收集。而垃圾收集器是运行在虚拟机中的一个低优先级的守护进程,为了不影
响性能,它只在必要的时候才运行。例如在向操作系统申请新内存空间的时候,发生异常的时候等等,因此内存并不是实时回收的。
Flex 内存泄露的原因:
有了垃圾收集器,为什么 Flex 还会产生内存泄露呢?从垃圾收集器的角度看,对象分为“有效”和“无效”两类;而从 Flex 应用程序的角度看,对象又被分
为“有用”和“无用”两类。
举个例子,当程序出现逻辑错误需要提示用户时,Flex 程序构造一个提示框,这时,提示框是一个“有用”的对象,当用户点击关闭按钮关掉提示框后,
提示框就变成“无用”的对象了,应用程序再也不会用到它(下次出现相同逻辑错误时,程序又会构造一个全新的提示框)。应用程序认为这个提示框应
该被回收掉,但是因为某种原因,存在一个从“有效”对象到这个提示框的引用,垃圾收集器显然认为提示框也是“有效”的。这个“有效”“无用”的提示框便造
成了 Flex 的内存泄露。
..............................