Flash Builder 的概要分析
分析应用程序能够帮助我们确定以下问题
调用频率 有时,我们会多次调用一些计算代价昂贵(耗时)的方法,而这些调用是不必要的。通过识别那些经常被调用的方法,我们能够在调节性能的过程中,专注于应用程序中对性能影响最大的地方。
方法耗时 性能分析工具能够告诉我们一个调用特定方法所消耗的时间。如果这个方法被调用了多次,性能分析工具将告诉我们,在与应用程序交互的这段时间里,调用这个方法所消耗的平均时间。如果其中的一些方法造成了性能瓶颈,我们可以想办法优化一下它们。
调用堆栈 通过追踪某一方法的调用堆栈,我们可以看到应用程序调用该方法的完整路径。
实例数量(对象分配) 有时,我们会发现同一对象被创建了太多次,而我们只需要这一对象的几个实例。在这些情况下,如果只需要一个实例,我们可能考虑使用单件模式;如果需要多个,则应用其他技术来减少对象分配。如果确实需要很多该对象的实例,我们得考虑优化对象本身来降低资源总数以及内存占用量。
对象大小 如果观察到某些对象大小异常,我们可以尝试优化它们以减少其内存占用量。程序中某些对象被多次创建时尤为有效。
垃圾回收 比较性能快照时,我们可能发现一些不再被程序使用的对象仍然在"loitering",或者存储在内存中。为了避免内存泄漏,我们可以添加一些逻辑,来移除这些对象身上的"残余"引用。
其实目的就一个:优化。 途径有两条:重写占用资源大的环节,完善有问题的环节;前者可以叫内存占用不合理,后者叫内存泄露,囧。
比如在做关于图形化的操作时,例如大量大尺寸的位图交互(碰撞等)所占用的内存以及CPU都是很让人蛋疼的,看我现在摆弄的项目图:
基本上占用内存的几大巨头都是位图了,上面那几个都是人物的动作序列图。
另外这个内存占用的显示数字跟系统任务管理系的内存分析数字是有些出入的,它包含的仅仅是为了保留该类中定义的所有属性,所分配的字节数(每一属性大概需要4字节)。它并不包含:
1、 子对象或字符串占用的内存。
2、 播放器追踪对象所需的内存。每一对象有许多内存控制块没有被计算进来,性能分析工具中也没能显示出所有"display objects"背后的隐藏对象所占用的内存
3、 或者用于处理网络通信或文件访问的内存
4、 浏览器占用的内存
5、 存储Flash Player编码及预定义变量所需的内存
操作系统告诉我们的通常会远大于概要分析所算出的内存。
还有一种测内存的方法,System.totalMemory。算出的值在以上两者之间:
Flash Player 以每4096字节为一个块,将内存从操作系统中划分给小的对象。比如,一个4096字节的块包含了256个16字节的对象,而另一个却包含了16个256字节的对象。
flash.system.System.totalMemory测量从操作系统分配的块的数量以及其他的一些较大的内存分配。它不包括:
1、 操作系统用来显示可视部分、获取事件、处理网络或文件I/O所需的内存。
2、 浏览器占用的内存。
3、 存储Flash Player编码及预定义变量所需的内存。
4、 当Flash Player需要分配第257个16字节数据块的时候,它会从操作系统分配另一个4096字节的块,同时将其预留给16字节的对象
如果不再需要一个块中的所有16字节对象,Flash Player会将该块所占用的内存释放,返给操作系统。
可能会出现这样的情景:分配了上千个16字节对象,但是每256个对象只释放其中的255个,这样的话最终会得到很多块,每个块只包含了 很少的几个16字节对象。
5、 Flash Player不会合并这些对象稀疏的块,这样System.totalMemory以及操作系统告诉我们的将远远大于分析工具显示的,因为大量的系统内存被分配出去却未的到充分的利用。
下面说说内存泄露的情况:
这时你需要制作2个内存快照,用来比对查看那些实例没有被收拾掉,制作第一张快照时,最好在项目的待操作状态,就是个个功能基本加载完毕,用户还没有展开任何操作,所有都是就绪状态,暂时我们先叫A状态。
然后开始个个模块的功能操作,(比如打开每个功能面板,PK,战斗,捕捉,参加其他交互),然后停止操作关闭各个功能模块,回到A状态
(看起来跟A状态相同)此时的状态我们称为B,制作内存快照B。
然后点击"闲置对象",从打开的试图中我们可以看见闲置对象的概要分析数据:(不截图了,太懒了)
需要说明的是:可能有很多东西泄漏了,但通常是由一到两个根本原因引起的。
最好从祖宗辈对象开始,因为通常它们会包含许多来自子对象的引用,而释放这祖宗对象,同时也能释放其子对象。
Flash Builder的profile就是一个性能监测器,也是adobe向传统编程人员提供的flash编程又一利器。
1.profile大致是跟flashplayer进行通讯,每隔1ms左右的时间进行一次快照,获取被监测的正在运行的swf的性能相关数据。
2.profile提供performance性能监测和memory内存监测两种监测供使用者选择。
pofile不但可以监测flex中的程序,同时可以监测外部swf文件,只要该swf文件的debug为true,譬如cs3编写的swf,可以先在cs3中运行调试,这时生成的swf就是debug模式的。
3.profile监测外部swf的步骤,进入flex profile视图,选择profile菜单,第一项就是profile external file。
4.profile运用的是flash.sampler包中的相关类,编程人员也可以自己调用包中的类编写自己的profile。
5.profile运行过程中用户可以自己获取程序的性能、内存快照,并可以进行对比,查看class的instance个数,函数调用次数,调用时间,调用者,instance的引用次数以及引用者,两次快照间一直存在的instance,可以手工调用gc,图形显示程序内存的占用情况等等。
转载于:https://my.oschina.net/yuanxiaoyu/blog/3057439
Flash Builder 的概要分析相关推荐
- 关于 Flash Builder
主页 / 使用 Flash Builder 4 关于 Flash Builder 使用 Flash Builder 可以完成的工作 Flash Builder 版本 Flash Builder 安装程 ...
- Flash Builder 入门
Flash Builder 是一个集成的开发环境 (IDE),用于开发使用 Flex 框架和 ActionScript 3.0 的应用程序.您可以开发用于部署到 Adobe Flash Player ...
- Flash Builder 4.6 配合使用 Adobe Scout CC || SWF Scout Enabler
写本文的原因: 1. Adobe Scout CC 只能配合 Flash Builder 4.7 及其新版编译器 ASC 2.0 使用: 2. 你仍然在用 Flash Builder 4.6 或者像我 ...
- 使用 Flash Builder 的 Apple iOS 开发过程
使用 Flash Builder 的 Apple iOS 开发过程 iOS 开发和部署过程概述 构建.调试或部署 iOS 应用程序前的准备工作 在测试.调试或安装 iOS 应用程序时选择的文件 将应用 ...
- Adobe Flash Builder 4.6 开发环境详解
下面详解Adobe Flash Builder 4.6 开发环境: 欢迎页: 由此图可以看到, Flex已经发布了4.12版本:Flash Player 发布了11.2,AIR发布了3.2:这是以前的 ...
- 使用Flash Builder 4.5进行多平台游戏开发
转自:使用Flash Builder 4.5进行多平台游戏开发 目录 设置新项目 配置移动平台 优化技巧和诀窍 提交应用程序 延伸阅读 需求 预备知识 要求拥有使用Flash Builder开发项目的 ...
- Adobe Flash Builder 4.5的安装
1. Audobe Flex和Flash Builder是什么? Flex 是一个可构建具有表现力的移动.网络和桌面应用程序并且高效.免费的开放源框架.Flex 允许您构建共享一个公共代码库的网络和移 ...
- Flash Builder 4beta2 版中的新特性
这是一篇来自Adobe开发者中心的文章,由RIAMeeting翻译小组成员candy_doll翻译,原文地址是: http://www.adobe.com/devnet/flex/articles/ ...
- Flash Builder 找不到所需的Adobe Flash Player调试器版本的解决办法
Flash Builder在Debug时出现的问题:Flash Builder 找不到所需的Adobe Flash Player调试器版本 解决方法: 1. 进入Flash Builder的安装目录 ...
- Myeclipse 8.0 +Flash builder 4 plugin 的实现
其实过程非常,简单,但是我之前在网上找了很多资料都说,需要先装 Eclipse 3.5 ,然后安装MyEclipse 8.0的插件到Eclipse,最后再安装Flash builder 的插件,期间还 ...
最新文章
- Ubuntu 19.10 19.04 18.04 18.10等系统版本修改国内镜像源 国内更新源
- java isodate格式_fmt:formatDate的输出格式详解
- AI:***一文读懂ML,DB/NLP/算法全有了……
- mysql练习_创建库与列表、增加列表信息、列表查询(包含多列表查询)_月隐学python第23课
- Educational Codeforces Round 37-F.SUM and REPLACE (线段树,线性筛,收敛函数)
- Js引擎解析执行 阅读笔记
- Java分布式篇4——Redis
- cad.net 读取pc3,pmp 读取pc3打印机文件
- vue中使用this遇到的坑
- php获取并删除数组的第一个和最后一个元素
- js或css指定元素点击时内容不可被选中
- 瞬间几千次的重复提交,我用 SpringBoot+Redis 扛住了~
- Google IO 2018 来啦!
- 读取进程access_IOT指南之嵌入式软件篇gt;5.Linux c编程之进程间通信(管道)
- 多测师肖sir_高级金牌讲师_简历制作
- linux安装weget命令,linux安装wget命令
- 欺骗的艺术from凯文•米特尼克
- 百度地图-根据起终点经纬度驾车导航
- Android 秒表
- 中继(扩展)wifi覆盖范围的路由器的设置(图文教程)【中继路由器的设置图文教程】