- 浏览: 783413 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (573)
- Java基础 (76)
- C++基础 (5)
- hibernate (5)
- struts (4)
- spring (1)
- webservice (7)
- AjaX基础 (0)
- JS脚本 (53)
- 正则表达式 (5)
- html脚本 (30)
- 数据库基础 (54)
- 工作相关 (49)
- 其他 (30)
- Linux (9)
- web服务器 (17)
- JSP (13)
- eclipse (6)
- 面试题相关 (20)
- XML (3)
- Apache common (2)
- 生活 (35)
- VMware (1)
- log4j (9)
- BeanUtils (2)
- 设计模式 (3)
- UML (1)
- UNIX (1)
- ibats (5)
- GT-Grid (17)
- ABAP学习 (17)
- ABAP (35)
- ABAP--ALV (11)
- ABAP--WEBDIMPRO (0)
- abap-sample (1)
- BEMS (2)
- flex (33)
- GIS技术 (3)
最新评论
一.简述Flex内存释放优化原则。什么情况会发生内存经泄露,一旦有内存泄露,你会如何解决?
FLEX内存释放优化原则:
1. 被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉;
2. 父对象内部的子对象被外部其他对象引用了,会导致此子对象不会被删除,子对象不会被删除又会导致了父对象不会被删除;
3. 如果一个对象中引用了外部对象,当自己被删除或者不需要使用此引用对象时,一定要记得把此对象的引用设置为null;
4. 本对象删除不了的原因不一定是自己被引用了,也有可能是自己的孩子被外部引用了,孩子删不掉导致父亲也删不掉;
5. 除了引用需要删除外,系统组件或者全局工具、管理类如果提供了卸载方法的就一定要调用删除内部对象,否则有可能会造成内存泄露和性能损失;
6. 父对象立刻被删除了不代表子对象就会被删除或立刻被删除,可能会在后期被系统自动删除或第二次移除操作时被删除;
7. 如果父对象remove了子对象后没有清除对子对象的引用,子对象一样是不能被删除的,父对象也不能被删除;
8. 注册的事件如果没有被移除不影响自定义的强行回收机制,但有可能会影响正常的回收机制,所以最好是做到注册的事件监听器都要记得移除干净。
9. 父对象被删除了不代表其余子对象都删除了,找到一种状态的泄露代码不等于其他状态就没有泄露了,要各模块各状态逐个进行测试分析,直到测试任何状态下都能删除整个对象为止。
内存泄露情况:
1. 引用泄露:对子对象的引用,外部对本对象或子对象的引用都需要置null;
2. 系统类泄露:使用了系统类而忘记做删除操作了,如BindingUtils.bindSetter(),ChangeWatcher.watch()函数时候完毕后需要调用ChangeWatcher.unwatch()函数来清除引用 ,否则使用此函数的对象将不会被删除;
类似的还有MUSIC,VIDEO,IMAGE,TIMER,EVENT,BINDING等。
3. 效果泄露:当对组件应用效果Effect的时候,当本对象本删除时需要把本对象和子对象上的Effect动画停止掉,然后把Effect的target对象置null; 如果不停止掉动画直接把 Effect置null将不能正常移除对象。
4. SWF泄露:要完全删除一个SWF要调用它的unload()方法并且把对象置null;
5. 图片泄露:当Image对象使用完毕后要把source置null;(为测试);
6. 声音、视频泄露: 当不需要一个音乐或视频是需要停止音乐,删除对象,引用置null;
内存泄露解决方法:
1. 在组件的REMOVED_FROM_STAGE事件回掉中做垃圾处理操作(移除所有对外引用(不管是VO还是组件的都需要删除),删除监听器,调用系统类的清除方法)
先remove再置null, 确保被remove或者removeAll后的对象在外部的引用全部释放干净;
2. 利用Flex的性能优化工具Profile来对项目进程进行监控,可知道历史创建过哪些对象,目前有哪些对象没有被删除,创建的数量,占用的内存比例和用量,创建过程等信息;
二.你常用的Flex框架是什么?简述一下它的特点。
mate.
特点:Flex应用是基于事件驱动的,而Mate框架使其变得更加得简单,Mate允许用户定义是谁正在管理/处理这一事件,以及数据是否需要从服务器端返回,或者其他的什么事件需要被触发,所有的这些都使得Flex应用的开发变得更加得简单。
三.Flex是如何与flash协作的?
实现编码与设计的好处是显而易见的:
1.代码易于维护与二次开发。所有AS代码以面向对象的思想在flash外部组织,用notepad即能打开。比起传统的as2分散于frame之间,以及更早的分散于影片与按纽之上,其优点好处不言而喻。
2.设计独立于代码之外。可以在没有程序员的清况下,修改程序(系统) 的外观,亦可以新做一批theme;程序没有变,只是改改图片和排列位置,大小等,就可以迅速焕然一新。譬如,在春节时,加一些春节的时令元素进去,这将是一件很容易做的事情。
四.如何提升Flex运行效率,请从各方面进行简述。
1、避免容器的多级嵌套,减少相对尺寸、相对定位的使用。
在使用百分比来给容器内的元件定尺寸,一旦容器中的任何一个元件的位置和尺寸变化,都会引发容器对所有子级的重定位动作。如果嵌套的级别很深,这个计算量会很大。
2、尽量使用轻量级的容器
Canvas是体积最小的容器,它只支持绝对定位。很多时候,都可以使用它来代替HBOx和VBox。另外,Canvas也是我们编写自定义容器性质组件的一个首选。它具有容器的基本功能,利于扩展。
3、避免使用大体积的组件,比如DataGrid、AdvancedDataGrid
大个子组件的功能强大,但开销也是非常大的。由于功能的复杂性,使得皮肤、样式、itemRenderer的实现都格外复杂。
4、处理数据时多用分页的方式
在使用数据类型控件时,尽量减少数据一次的显示量。比如TileList,它会把数据一次性全部创建,不管是不是需要显示,这样很浪费资源。 ViewStack 、TabNavigator等在处理元件时,并不是一次创建,只要元件在第一次被显示时才创建,这样,就避免的不必要的开销。
5、setStyle和styleName
Flex 组件的皮肤都是可视化元件,组件在自身初始化时,会使用当前的样式比如styleName完成所有皮肤元件的绘制。如果我们在运行期间通过 setStyle修改了组件的样式,组件的尺寸、位置就会作相应调整。联系到第一条,如果组件位于一个层级很深的容器中,也会有一个大的计算量。
FLEX内存释放优化原则:
1. 被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉;
2. 父对象内部的子对象被外部其他对象引用了,会导致此子对象不会被删除,子对象不会被删除又会导致了父对象不会被删除;
3. 如果一个对象中引用了外部对象,当自己被删除或者不需要使用此引用对象时,一定要记得把此对象的引用设置为null;
4. 本对象删除不了的原因不一定是自己被引用了,也有可能是自己的孩子被外部引用了,孩子删不掉导致父亲也删不掉;
5. 除了引用需要删除外,系统组件或者全局工具、管理类如果提供了卸载方法的就一定要调用删除内部对象,否则有可能会造成内存泄露和性能损失;
6. 父对象立刻被删除了不代表子对象就会被删除或立刻被删除,可能会在后期被系统自动删除或第二次移除操作时被删除;
7. 如果父对象remove了子对象后没有清除对子对象的引用,子对象一样是不能被删除的,父对象也不能被删除;
8. 注册的事件如果没有被移除不影响自定义的强行回收机制,但有可能会影响正常的回收机制,所以最好是做到注册的事件监听器都要记得移除干净。
9. 父对象被删除了不代表其余子对象都删除了,找到一种状态的泄露代码不等于其他状态就没有泄露了,要各模块各状态逐个进行测试分析,直到测试任何状态下都能删除整个对象为止。
内存泄露情况:
1. 引用泄露:对子对象的引用,外部对本对象或子对象的引用都需要置null;
2. 系统类泄露:使用了系统类而忘记做删除操作了,如BindingUtils.bindSetter(),ChangeWatcher.watch()函数时候完毕后需要调用ChangeWatcher.unwatch()函数来清除引用 ,否则使用此函数的对象将不会被删除;
类似的还有MUSIC,VIDEO,IMAGE,TIMER,EVENT,BINDING等。
3. 效果泄露:当对组件应用效果Effect的时候,当本对象本删除时需要把本对象和子对象上的Effect动画停止掉,然后把Effect的target对象置null; 如果不停止掉动画直接把 Effect置null将不能正常移除对象。
4. SWF泄露:要完全删除一个SWF要调用它的unload()方法并且把对象置null;
5. 图片泄露:当Image对象使用完毕后要把source置null;(为测试);
6. 声音、视频泄露: 当不需要一个音乐或视频是需要停止音乐,删除对象,引用置null;
内存泄露解决方法:
1. 在组件的REMOVED_FROM_STAGE事件回掉中做垃圾处理操作(移除所有对外引用(不管是VO还是组件的都需要删除),删除监听器,调用系统类的清除方法)
先remove再置null, 确保被remove或者removeAll后的对象在外部的引用全部释放干净;
2. 利用Flex的性能优化工具Profile来对项目进程进行监控,可知道历史创建过哪些对象,目前有哪些对象没有被删除,创建的数量,占用的内存比例和用量,创建过程等信息;
二.你常用的Flex框架是什么?简述一下它的特点。
mate.
特点:Flex应用是基于事件驱动的,而Mate框架使其变得更加得简单,Mate允许用户定义是谁正在管理/处理这一事件,以及数据是否需要从服务器端返回,或者其他的什么事件需要被触发,所有的这些都使得Flex应用的开发变得更加得简单。
三.Flex是如何与flash协作的?
实现编码与设计的好处是显而易见的:
1.代码易于维护与二次开发。所有AS代码以面向对象的思想在flash外部组织,用notepad即能打开。比起传统的as2分散于frame之间,以及更早的分散于影片与按纽之上,其优点好处不言而喻。
2.设计独立于代码之外。可以在没有程序员的清况下,修改程序(系统) 的外观,亦可以新做一批theme;程序没有变,只是改改图片和排列位置,大小等,就可以迅速焕然一新。譬如,在春节时,加一些春节的时令元素进去,这将是一件很容易做的事情。
四.如何提升Flex运行效率,请从各方面进行简述。
1、避免容器的多级嵌套,减少相对尺寸、相对定位的使用。
在使用百分比来给容器内的元件定尺寸,一旦容器中的任何一个元件的位置和尺寸变化,都会引发容器对所有子级的重定位动作。如果嵌套的级别很深,这个计算量会很大。
2、尽量使用轻量级的容器
Canvas是体积最小的容器,它只支持绝对定位。很多时候,都可以使用它来代替HBOx和VBox。另外,Canvas也是我们编写自定义容器性质组件的一个首选。它具有容器的基本功能,利于扩展。
3、避免使用大体积的组件,比如DataGrid、AdvancedDataGrid
大个子组件的功能强大,但开销也是非常大的。由于功能的复杂性,使得皮肤、样式、itemRenderer的实现都格外复杂。
4、处理数据时多用分页的方式
在使用数据类型控件时,尽量减少数据一次的显示量。比如TileList,它会把数据一次性全部创建,不管是不是需要显示,这样很浪费资源。 ViewStack 、TabNavigator等在处理元件时,并不是一次创建,只要元件在第一次被显示时才创建,这样,就避免的不必要的开销。
5、setStyle和styleName
Flex 组件的皮肤都是可视化元件,组件在自身初始化时,会使用当前的样式比如styleName完成所有皮肤元件的绘制。如果我们在运行期间通过 setStyle修改了组件的样式,组件的尺寸、位置就会作相应调整。联系到第一条,如果组件位于一个层级很深的容器中,也会有一个大的计算量。
发表评论
-
Flex 非常实用的资料
2012-05-31 15:38 1223【改变输出swf的尺度,背景颜色或帧频】 在"Na ... -
Flex正则表达式规则
2012-05-31 15:35 17121.Flex正则表达式规则 1.1普通字符 字母、数字、汉 ... -
Flex中[Bindable]的使用心得
2012-05-30 16:55 920在Flex编程中,Bindble使用到最多的元数据。该标签可以 ... -
FLEX元标签_Bindable
2012-05-30 16:46 11071 概述 [Bindable ... -
Flex Bindable
2012-05-30 16:41 828对一个类声明绑定,相当于给这个类里的所有属性都声明了绑定。等同 ... -
Flex [Bindable] 以及使用方法
2012-05-30 16:37 1131绑定: 举个例子: 给下面的public变量加上[Bind ... -
关于flex开发自定义组件需要注意的问题
2012-05-23 14:24 1153一.首先回答,为什么要 ... -
Flex中自定义组件
2012-05-23 14:17 1114如要重写组件,就不得不了解Flex中组件初始化过程。初始化过程 ... -
flex,datagrid多列排序
2012-03-21 15:01 1079<?xml version="1.0" ... -
flex,datagrid 按照列来排序
2012-03-21 13:56 2139排序部分 import mx.controls.DateFie ... -
flex 动态给控件赋值,通过反射遍历MXML中的组件
2012-03-21 13:52 1373flex 动态给控件赋值,通过反射遍历MXML中的组件。当有1 ... -
flex双击不生效问题
2012-03-21 13:50 962今天用到flex的doubleclick的事件,但是不生效,原 ... -
FLEX datagrid 点击列头排序后,行编辑问题
2012-03-21 13:45 1001点击列头排序后。行编辑事件结束后,adobe默认会自己重新将d ... -
Flex 内存处理的方法
2012-03-20 11:25 8771.当任何对象unload后,fl ... -
Flex3 Profile的使用
2012-03-13 15:38 955flex的profile就是一个性能监测器,也是adobe向传 ... -
FLEX内存释放优化原则
2012-03-13 15:36 821FLEX内存释放优化原则: 1. 被删除对象在外部的所有引 ... -
flashplayer的缓存目录
2012-03-13 15:34 3062flashplayer的缓存目录是: XP系统下是C:/Do ... -
swf 更新后,客户端不需要清空缓存即可查看最新版本
2012-03-13 14:20 2391我们在用Flex开发应用的时候,每次修改了swf,上传到服务器 ... -
用RSL来为你的flex程序减肥
2012-03-13 14:19 1173用RSL来为你的flex程序减肥 问题:一个只有几个控件的 ... -
Flex控制session方法
2011-12-07 08:52 1081采用filter 监控 MessageBrokerServle ...
相关推荐
本篇文章将深入探讨Flex虚拟机的内存管理机制以及如何预防和处理内存泄漏问题。 内存管理在任何软件开发中都至关重要,尤其是在动态语言如ActionScript中。Flex虚拟机采用了一种自动垃圾回收(Garbage Collection, ...
本文将针对“FLEX内存释放优化原则”进行深入探讨,帮助开发者掌握有效的内存管理技巧。 #### 二、核心优化原则 1. **删除对象前需通知系统** - 在删除对象之前,必须明确地告知系统即将进行的操作。这一步骤对于...
### Flex内存管理及相关内容 #### 一、Flex与ActionScript中的内存管理机制 Flex作为一种用于构建RIA(Rich Internet Applications)的应用框架,其背后的编程语言ActionScript(简称AS)支持垃圾回收(Garbage ...
Flex 应用内存泄露的分析与诊断主要集中在 Flex 应用程序中由于内存管理不当导致的问题。Flex 使用 ActionScript 语言编写,其运行环境在 FlashPlayer 的 ActionScript Virtual Machine (AVM) 中,该虚拟机包含一个...
Flex垃圾回收机制是ActionScript 3.0中的一个重要概念,主要应用于Adobe Flex应用程序的内存管理。在Flex开发中,理解并掌握垃圾回收的工作原理对于优化应用程序性能和避免内存泄漏至关重要。 1. **垃圾回收的基本...
总结来说,避免Flex中的内存泄露需要开发者细心地管理和释放事件监听器、子对象引用、静态变量、CSS样式、UI组件、图片资源以及其他加载的媒体和网络资源。遵循这些最佳实践,可以显著提高Flex应用的性能和稳定性。
Flex内存泄露总结主要聚焦在Flash Player的垃圾回收机制和内存管理问题上,这对于优化Flex应用程序的性能至关重要。首先,我们要理解垃圾回收的基本原理。在Flash Player中,内存的释放工作由垃圾回收器负责,它是一...
#### Flex内存泄露的原因 尽管AVM提供了垃圾收集机制,但Flex应用依然可能遭遇内存泄露问题。主要原因是对象引用关系导致垃圾收集器误判某些对象仍处于活动状态。具体而言: 1. **对象引用不当:** 当某个对象实际...
本篇内容将深入探讨Flex中的内存泄漏及其原因,以及Flash Player的内存管理机制。 首先,我们来了解一下什么是内存泄漏(Memory Leak)。内存泄漏是指程序在申请内存后,无法释放已不再使用的内存空间,一次小的...
以下是一些解决Flex内存泄漏的关键点: 1. **删除无用对象**:确保在不再需要对象时正确地删除它们,避免它们在内存中驻留。这包括删除事件监听器、解除绑定数据等。 2. **事件监听器管理**:事件监听器是常见的...
总结来说,当遇到FLEX内存不足导致无法使用设计模式时,可以尝试更新或替换相关DLL文件,以改善应用的内存管理。此解决方案特别适用于那些拥有大型或复杂Flex项目的开发者,通过提升系统资源的利用效率,使得设计...
### Flex内存优化技巧详解 在开发Flex应用时,合理的内存管理是提高应用性能的关键因素之一。本文将基于提供的文件信息,深入探讨如何更好地优化Flex内存使用,并通过具体实例阐述如何编写更加高效的Flex代码。 ##...
【Flex面试题】Flex面试题主要涵盖Flex的基础概念、开发框架、MVC模式的应用、内存管理、垃圾回收机制、前端性能优化以及与后端通信等多个方面。以下是对这些知识点的详细解析: 1. AS2与AS3的区别: AS2...
Flex事件机制是Adobe Flex应用程序中处理用户交互和组件通信的核心组成部分。它主要涉及事件流、事件处理程序以及事件对象的概念,这些在构建富互联网应用程序(RIA)时扮演着至关重要的角色。下面将对这些概念进行...
避免Flex内存泄露的关键在于良好的引用管理。以下是一些最佳实践: - 避免全局变量和静态变量持有长期存在的对象引用,除非你确定它们在整个应用生命周期中都需要。 - 使用完毕后及时解除事件监听器,避免形成循环...
1. **垃圾收集(Garbage Collection)**: 垃圾收集是Flex中实现内存管理的主要机制。它自动追踪并释放不再使用的对象所占用的内存。理解如何与垃圾收集器协同工作是减少内存问题的关键。开发者应确保不持有对不再...
总之,解决"Out of memory-cannot load design mode"的问题需要深入理解Flex编程和内存管理,同时也需要熟悉所使用的开发工具的配置和限制。通过代码优化、调整IDE设置和保持软件更新,大多数情况下可以有效避免和...