Flex应用开发内存检测及优化技巧

来源:互联网 发布:如何买亚瑟士 知乎 编辑:程序博客网 时间:2024/04/30 23:47

我试着抛砖引玉,谈谈有关Flash Player的内存管理。

要驾驭某样东西你必须得去了解它,才能够按照正确的方向办事。我们先说说FP是如何分配内存,完成垃圾回收和优化渲染显示的。然后会涉及到事件监听和字典,延迟验证模式,最后还有IDE自带的Profiler.

FP虚拟机向操作系统申请内存,然后予以分配。内存的分配是这样的:内存块是以4096字节为单位在堆上进行分配的;每个属性长度为4字节+为属性类型分配的内存;内存块可能永远不会被回收。内存回收是这样的:它伴随着内存分配执行,在空闲的时候不会执行内存回收。垃圾回收回收下面重点讲。

FP的内存管理。FP从操作系统获得大块内存,然后内存块会被分割成由固定大小的小块内存组成的内存池,因此FP分配的多数内存都是相对比较小块的。内存池用光以后,FP会向操作系统申请新内存块。

FP的垃圾回收。垃圾回收的方法:标准的标记清除垃圾回收器;增量扫描清除闲置对象;倘若一个对象没有活动的引用指向它,那该对象则是可以被垃圾回收的。前两者是FP自动做的,我们得着重看看第三种。当我们将对象的引用设置为null的时候,过一段时间以后,FP探测到该对象闲置不用而且没有引用就会将其自动回收。在这里要说说弱引用。弱引用监听器的使用方法如下:addEventListener(‘click’,btnClickHandler,false,0,true);使用弱字典引用(new Dictionary(true))。在使用强引用事件侦听器的时候,必须显式地移除事件侦听器。垃圾回收仅会在内存分配过程中被触发。当内存池快被完爆的时候,FP在向操作系统要“钱”前会“扫荡”一下,尝试执行垃圾回收。打个不好的比喻:有个好吃懒做的人家里给了他一百万,他拼命花,大手大脚借钱,当剩下的钱快吃不上饭的时候就会在向家里人要钱前去向他借钱的朋友要钱。

用好强类型。优先使用Vector而不是Array,在最新版当中,其性能得到了优化,并且允许在数据结构当中使用强类型标记它的内容(这个有点类似使用元标签规定数组内容类型);在代码当中使用强类型,例如:var n:Number或者var b:Boolean, var foo:Button;优先使用int而不是Number;当可能的时候消除子表达式,比如for循环当中,定义好变量值最大值,var count:int=array.length;避免出现i<array.length的情况,因为每次循环都要重新计算一次数组长度做无用功。DescribeType()setStyle()方法性能开销很大,尽可能避免使用。

FP优化渲染。FP是建立在可变环形跑道模型上面的——代码执行,渲染。失效和验证模型就是建立在此基础之上的来高效完成工作,同步修改的。

识别内存泄漏和性能瓶颈。使用Profiler检查方法调用的开销,识别内存泄漏和过大的内存开销。无论你的应用多复杂还是简单,应该常用它来检查性能瓶颈。

原创粉丝点击