1、 Flash Player的内存使用(与Java类似,可参照java的实现机制)
1.1、 Flash Player的内存分配
Flash Player负责在运行时为Flex应用程序提供内存。当创建了类实例的代码行时就向操作系统申请为实例划分了一块内存。
向操作系统请求内存的过程很慢, 所以Flash Player请求了 比其所需的更大的内存块,保证有一些额外空间以便开发者下一次请求更多内存时可用。此外,Flash Player会监视不再使用的内存以便可重用这些内存,尽可能避免向操作系统申请更多内存。
1.2、 按引用传递和按值传递(参照Java)
分基本类型与引用类型... ...
1.3、Flash Player的垃圾收集
垃圾收集在分配时使用,^_^ ^_^ 这一点可能让人有点迷糊。这意味着垃圾收集并不是发生在内存不再使用时,而是发生在应用程序请求更多内存时。在那个时候,垃圾收集器会尝试回收可用内存以便重新分配。
垃圾收集器如何检测不再被使用的内存呢?
^_^ ^_^ 又回到了java程序员的路子上了(C++/C#也是此原理):
A、 引用计数(效率高,但存在循环引用的问题)
B、 标记-清除(效率较低)
使用B方式,Flash Player会从应用程序顶层开始,标记每一个被引用的对象。它会向下递归每一个被引用的的对象并重复这个过程,持续深入向下,直到所有找到的对象都已标记。
同时使用A/B两种方式获得更高的性能和垃圾收集的准确度。
1.4、 垃圾收集(重点)
原理: 简单地说,不需要一个对象时,就要删除对该对象的所有引用。
如我们常用addChild()方法添加子组件到父组件,子组件也可以通过removeChild()或者removeChildAt(int index)方法移除。
记得在Flex应用程序中手动移除不再需要的子组件!
——————————————理解事件监听函数导致的泄露————————————
addEventListener()方法,该方法允许以编程方式监听某一被广播的事件。然而广播事件的每个对象都维护着对监听该时间的每个对象的引用。就垃圾收集而言,就意味着在某些情况下,如果一个对象监听着事件,就不会被用于垃圾收集。
解决方式:
A、 类型removeChild一样调用removeEventListener()。在理想情况下,一个应用程序中addEventListener()和removeEventListener()调用的次数应该相等。
B、 在监听函数中使用弱引用,如:
var textInput:TextInput = new TextInput();
textInput.addEventListener('change',handleTextChanged,false,0,true)
在addEventListener()方法中可以使用两个参数:事件名以及事件发生时需要调用的方法。然而,还可以指定另外3个参数,依次为事件监听函数是否使用捕获功能、在事件中相对其他监听函数的优先级以及是否使用弱引用。最后一个参数对于垃圾回收而言很重要,因为垃圾收集器会忽略弱引用,这就意味着弱引用所关联的对象会被收集(如果该对象拥有的全部是弱引用的话)
^_^ ^_^ 最后提下,据说Flex有专门的剖析程序,但好像是专业版才有(要收费哟...),所以你我此等普通用户还是勤奋点自己维护吧。
分享到:
相关推荐
### Flex应用程序开发:深入理解与实践 #### 一、Flex概览 Flex是Adobe Systems Incorporated推出的一款用于构建高质量的Rich Internet Applications(RIA)的开源框架。它基于Flash平台,允许开发者使用标准的Web...
### Flex 应用程序性能:改善客户端应用程序和服务器性能的技巧与技术 #### 概述 随着互联网技术的发展,富互联网应用(RIA)的需求日益增长。Macromedia Flex 是一个强大的平台,它允许开发者创建高性能的 RIA。...
Flex应用程序通常运行在Flash Player或Adobe AIR之上,能够跨平台运行。 2. Flex的主要组成部分 - ActionScript:Flex的核心编程语言,是一种面向对象的脚本语言,类似于JavaScript,但提供了更完善的面向对象特性...
在Flash Builder 3中开发Flex应用程序,用户可以利用其强大的集成开发环境(IDE),包括代码编辑、调试和性能分析工具,简化开发流程。Flash Builder 3是专为Flex和ActionScript开发设计的,提供代码提示、自动完成...
第五章和第六章可能会探讨FLEX中的数据服务,如AMF通信、Web服务调用和 BlazeDS/LiveCycle Data Services的使用,让FLEX应用程序能够与后端服务器无缝交互,实现数据的获取和更新。 第七章至第九章可能涉及更高级的...
- BlazeDS或LiveCycle Data Services:Adobe提供的中间件,允许Flex应用程序与Java或.NET服务进行数据交换,包括Socket通信。 2. **C#服务端开发**: - `System.Net.Sockets.Socket`类:用于创建和管理Socket连接...
通过对单一Flex商店应用程序会话的分析,我们发现Flex应用程序能够提供更加流畅的用户体验。这是因为Flex应用程序能够在客户端缓存大部分数据和逻辑,从而减少了与服务器之间的通信次数。这种设计使得Flex应用程序在...
- ActionScript是Flex应用程序的主要动力,负责处理所有的业务逻辑和交互行为。 - 对象和类的使用:可能自定义了一些类来封装特定的绘图功能或数据管理。 - 异步通信:如果应用需要保存或加载画作,可能涉及了与...
总结,使用Flex 4.5开发Android应用程序可以借助其强大的UI组件库、良好的编程模型和对原生API的访问能力,实现高效、跨平台的移动应用开发。虽然现在Flex可能不再是主流的Android开发工具,但了解其工作原理和优势...
9. **部署和发布**:最后,书会讲解Flex应用程序的打包、部署和发布策略,包括在不同的服务器平台(如Tomcat、IIS)上的部署方法。 10. **最佳实践和案例分析**:书中还会包含一些企业级应用开发的最佳实践,以及...
- Flex应用程序可以通过多种方式进行部署,包括但不限于Web服务器、Adobe AIR等。 #### 三、开发工具详解 ##### 3.1 探索Flash Builder界面 - **工作空间**:用于组织项目的目录结构,可以将多个项目组织在一起...
学习和分析这个FLEX相册程序源码,可以深入理解Flex框架的工作原理,如何利用Flex组件来创建动态的UI,以及如何通过ActionScript控制应用程序的逻辑。同时,对于想要提升自己在富互联网应用开发方面技能的开发者来说...
- **MXML和ActionScript**:Flex 4支持MXML(标记语言)和ActionScript(编程语言),这两种语言是构建Flex应用程序的基础。 - **数据绑定和事件处理**:Flex框架支持强大的数据绑定机制和事件处理模型,使得...
Flex,全称“Fast Lexical Analyzer Constructor”,是一种广泛使用的开源工具,主要用于生成词法分析器,也就是我们常说的扫描器或词法分析器。在软件开发中,词法分析是编译器或解释器的第一步,它将源代码分解成...
它允许开发者利用 Adobe Flex 技术快速创建复杂的地理空间应用程序。Flex 是一种开源的软件开发工具包,主要用于开发跨平台的桌面和移动设备应用。 - **应用范围**:该 API 主要应用于 Web GIS 领域,支持在多种平台...
Flex 应用内存泄露的分析与诊断主要集中在 Flex 应用程序中由于内存管理不当导致的问题。Flex 使用 ActionScript 语言编写,其运行环境在 FlashPlayer 的 ActionScript Virtual Machine (AVM) 中,该虚拟机包含一个...
Flash Builder内置了调试工具,可以对应用进行断点调试,查看变量值,分析性能瓶颈。同时,可以在模拟器或真实设备上进行测试,确保应用在不同Android版本和硬件上的兼容性。 总之,"Flex 4.5 开发安卓程序文档"是...
### 使用ADOBE FLEX 3 开发 Adobe AIR 1.5应用程序 #### 一、引言 随着Web技术的发展,富互联网应用(RIA)成为了一种趋势,它结合了桌面应用的强大功能与Web应用的易部署特性。Adobe AIR(Adobe Integrated ...
《FLEX企业应用开发实战》是一本专注于使用Adobe Flex技术进行企业级应用程序开发的专业书籍。Flex是基于ActionScript和MXML的开源框架,用于构建富互联网应用程序(RIA),尤其适用于创建交互性强、用户体验丰富的...