`

FlashPlayer垃圾回收机制

阅读更多

在家上网赚钱更容易

《Flash/Flex应用开发内存监测及优化技巧》文章中提到了一些概述性内容,这里做出详细解释。

1、什么是垃圾回收器:

垃圾收集器简称GC( Garbage Collector ),是一段自动执行的逻辑,Flash Player的通过GC自动管理内存使用,回收程序中无用的对象来释放内存

2、垃圾收集器不支持自动收集垃圾:

AS3.0是运行在第二代虚拟机(AVM2)上的,它引入了E4X、sockets、byte 数组对象、新的显示列表模型、正则表达式、正式化的事件和错误模型以及其它特性并支持更复杂的组件。  巨大的能力意味着巨大的责任,引入这些新控件带来一个副作用:垃圾收集器不再支持自动为你收集垃圾。Flash Player有两种方法来查找非活动对象并移除它们:引用计数法和标识清除法,在后面会介绍到。

3、如果一个对象没有活动的引用指向它,则这个对象是可以被垃圾回收的:

除了非原生类型(Boolean, String, Number, uint, int除外),总是通过一个句柄访问对象,而非对象本身。当你删除一个变量其实就是删除一个引用。见下例

  var a:Object = {foo:”bar”}

 

  var b:Object = a;

  delete(a);

  trace(b.foo);

创建一个对象并赋给引用a,又将a赋给引用b。删除引用a,该对象不会被回收,因为b还引用它,输出b.foo会得到bar。如果使用delete(b);将b也删除,那么该对象就能够被垃圾回收了。

4、垃圾回收并不是一直在运行的,“收垃圾的人只在周五清晨来”:

首先介绍引用计数法和标识清除法。

引用计数法(Flash Player8之前的机制)是一种用于跟踪活动对象的较为简单的方法,它从ActionScript1.0开始使用。当你创建一个指向某个对象的引用,该对象的引用计数器加1;当你删除该对象的一个引用,该计数器减1。当某对象的计数器变成0,该对象将被标记以便垃圾回收器回收。引用计数法简单,它不会非CPU带来巨大的负担;多数情况下它工作正常。不幸地是,采用引用计数法的垃圾回收器在遇到循环引用时效率不高。循环引用是指对象交叉引用(直接、或通过其他对象间接实现)的情况。即使应用程序不再引用该对象,它的引用计数器仍然大于0,因此垃圾收集器永远无法收集它们。

从Flash Player8之后采用标识清除法。FlashPlayer从你的应用程序根对象开始直到程序中的每一个引用,都为引用的对象做标记。然后遍历所有标记过的对象。它将按照该特性递归整个对象树。并将从一个活动对象开始能到达的一切都标记。该过程结束后,所有内存中没有被标记的对象不再有任何活动引用,因此可以被安全的删除。

标记-清除法非常准确。但是,由于FlashPlayer 遍历你的整个对象结构,该过程对CPU占用太多。FlashPlayer 9 通过调整迭代标识-清除缩减对CPU的占用。该过程跨越几个阶段不再是一次完成,变成偶尔运行。

5、有了GC,为什么还会内存泄漏?

GC 的触发不是根据程序的清除指令来执行,而是根据内存分配情况来执行的。内存空间越紧俏, GC 才工作越勤快。 GC 只管标记,而且内存释放是异步执行的。

整个过程极不透明;

未被释漯p>

在家上网赚钱更容易

分享到:
评论

相关推荐

    flash关于内存管理与内存管理

    Flash Player的垃圾回收机制采用了两种策略:引用计数法和标记清除法。引用计数法是最直观的方法,每当创建一个引用,对象的引用计数加一,引用被删除时减一。当计数为零时,对象可被GC回收。然而,这种方法在处理...

    AS3内存优化及垃圾回收.pdf

    本文主要讨论AS3中的内存优化和垃圾回收机制,这对于开发高性能的Flash应用至关重要。 首先,AS3内存优化的一个关键点是选择合适的显示对象。对于简单的非交互图形,推荐使用Shape对象,因为它的内存占用最小(236...

    AS3内存优化及垃圾回收参照.pdf

    在编写AS3代码时,理解这些内存优化技巧和垃圾回收机制是非常重要的,可以显著提升应用的性能和效率。合理使用对象,避免不必要的内存占用,以及正确管理资源的生命周期,都是AS3开发者需要掌握的基本技能。

    Flex内存泄露总结

    Flex内存泄露总结主要聚焦在Flash Player的垃圾回收机制和内存管理问题上,这对于优化Flex应用程序的性能至关重要。首先,我们要理解垃圾回收的基本原理。在Flash Player中,内存的释放工作由垃圾回收器负责,它是一...

    Flex 应用内存泄露的分析与诊断

    然而,尽管有垃圾收集器的存在,内存泄露仍然是一个挑战,主要原因是 FlashPlayer 的垃圾回收机制以及开发者在编程过程中对对象引用的管理不当。 首先,我们来看一下 FlashPlayer 的垃圾回收机制。垃圾收集器主要...

    Flex 编程注意之性能优化、垃圾回收的一些总结

    然而,尽管遵循以上规则,由于Flash Player的自动垃圾回收机制,有时内存仍可能持续较高。这时,可以采用非标准的强制垃圾回收策略,即通过故意引发错误并捕获它来触发垃圾回收: ```actionscript package util { ...

    flash内部机制

    4. **垃圾回收 (GC)**:自动管理内存,减少程序员的负担。 ### 小结 Flash Player作为一款历史悠久且广泛应用的技术,在其背后隐藏着复杂的内部机制。从核心周期到用户代码处理器,再到AVM2的具体实现,每个环节都...

    Flex内存管理及相关内容

    Flash Player中的垃圾回收机制是由一个名为垃圾回收器(Garbage Collector, GC)的后台进程负责执行的。该进程的主要任务是释放不再被应用程序使用的对象所占用的内存空间。在AS中,非基本类型(如Object、Array等)...

    C#版FlashPlayer动画播放器

    C#语言以其强大的类型系统、面向对象特性、垃圾回收机制以及.NET框架的支持而受到青睐。在这个FlashPlayer播放器中,开发者可能使用了C#类库来处理多媒体数据,如System.Media类,用于播放声音,或者更复杂的库如...

    DescriptionPaneAS3_flash源码_

    9. **性能优化**:理解Flash Player的内存管理和垃圾回收,以及如何避免性能瓶颈。 10. **组件开发**:源码中可能包含自定义组件的实现,这有助于我们了解如何创建可重用的UI元素。 通过深入研究这份AS3的Flash ...

    Flash,Flex和AIR应用开发内存监测及优化技巧

    Flash Player的垃圾回收机制不是始终运行的,它仅在内存分配过程中触发。垃圾回收器在标记清除闲置对象时采用增量扫描技术。开发者应使用弱引用(weak reference)来避免循环引用和内存泄漏。例如,在添加事件监听器...

    flash播放器(源码)

    它具有强大的类型系统、垃圾回收机制和丰富的类库,适用于开发桌面应用、Web应用以及游戏等。 2. **Windows Presentation Foundation (WPF)**:C#中的WPF是微软提供的一个用于构建Windows桌面应用程序的框架,它...

    flash播放器

    1. **C#基础**:C#是一种现代的、类型安全的、面向对象的编程语言,具有垃圾回收机制、强类型检查和异常处理等功能。初学者需要了解C#的基本语法,包括变量、数据类型、运算符、流程控制语句等。 2. **Windows ...

    flex内存泄露(转载)

    #### Flash Player虚拟机的垃圾回收机制 **垃圾收集器的工作原理:** 垃圾收集器通常通过标记-清除算法工作,识别并回收那些不再被任何活动路径引用的对象。Flex应用中的对象组织成树形结构,从根节点(通常是`...

    flashas3 api使用手册

    AS3相较于之前的版本,进行了大量的语法改进和性能提升,包括类的完全支持、强类型系统和垃圾回收机制。AS3中的所有数据都是对象,这使得它更接近于传统的面向对象编程语言。基础知识点包括变量声明(var关键字)、...

    Flash8和C#的整合交互

    C#具有强大的类型系统、垃圾回收机制以及丰富的类库,适合构建复杂的桌面应用和游戏。 4. 整合交互:Flash8和C#的整合主要是通过Adobe Flash Player的ExternalInterface API来实现的。这个API允许Flash内容与宿主...

Global site tag (gtag.js) - Google Analytics