Flex内存优化专题之——2、垃圾回收的时机

  Flash Player 在运行时请求内存的速度受限于浏览器。因此,Flash Player 采用小
量请求大块内存,而不是大量请求小块内存的内存请求策略。同样,Flash Player 在运行
时释放内存速度也相对较慢,所以 Flash Player 会减少释放内存的次数,只有在必要的
时候才释放内存。也就是说,Flash Player 的垃圾回收只有在必要的时候才会执行。

  当前,Flash Player 的垃圾回收发生在 Flash Player 需要另外请求内存之前。这样,
Flash Player 可以重新利用垃圾对象所占用的内存资源,并且可以重新评估需要另外请求
的内存数量,也会节省时间。  

  在程序的实际运行中验证了以上的说法,并不是每次应用申请内存时都会导致垃圾回
收的执行,只有当 Flash 占用的内存紧张到一定程度时才会执行真正的垃圾回收,如果应
用中内存开销增长是匀速的,那么计算机物理内存越大,则垃圾回收触发周期越长。在我
的测试环境中,计算机有 2G 的物理内存,直到打开 FLSH 应用的浏览器占用 700M 物理内
存之后才会导致 Flash Player 回收垃圾内存。

  来自 Adobe 公司的 Alex Harui  总结了两点: 
  1.何时真正执行垃圾回收不可预知。
  2.垃圾回收总是在请求内存的时候触发,而不是在对象删除时发生。

  最后,有关 FP9 中垃圾回收一件非常重要的事情就是:垃圾回收不是立即进行的,而
是延迟的。当没有任何对象引用某个对象后,那个对象也不会立即被从内存中清除,相反,
它们会在将来某个不确定的时候被移出(从开发者的角度来看)。但这些对象在没有被垃
圾回收之前,它们仍然在工作(占用内存和 CPU),尽管这不是我们所希望的。

  虽然我们不能指令 Flash Player 立即回收内存,但在程序确定不再引用一个正在工作
的对象之前,应终止其工作。比如,停止已经启动的 Timer,停止正在播放的视频或声音,
以防止其继续占用 CPU。

 

 

posted @ 2012-12-18 15:21  小小有  阅读(201)  评论(0)    收藏  举报