积分规则 网站地图 帮助中心    
嵌入式软件 单 片 机 DSP 存储器 传感控制 光电显示
嵌入式硬件 CPLD/FPGA SOPC AD/DA 接口电路 模拟设计
I C设计 通信产品 汽车电子 电源产品 消费电子 数控系统
工业控制 军工/航天 安防产品 医疗电子 计算机外设 测试测量
供应 I C
求购 公司库

  IC 求购 销售 公司 论文 DATASHEET 参考设计 论坛
当前位置: 电子技术 >> 嵌入式软件 >> JAVA
  相关分类: LINUX | WINCE | UC/OS | Bootloader | 下载 | VXWORKS | 网络协议 | JAVA | 汇编 | 驱动设计 | Symbian | XP Embedded | Nucleus | 新产品 | 相关文章 | 综合技术 |
J2ME性能优化之—优化方法探讨
 
作者:zxhwolfe   来源:J2ME开发网    点击数:936   更新时间:2006-9-12
您可以添加到网摘 让更多人关注此文章:

    

对代码进行优化的最简单办法就是首先不要调用这些代码。这并不是说要删除这些代码,也许可以用其他办法来调用它们(后者事实减少对它的调用)。游戏的主循环是游戏运行的最主要做的事情,应该更多地考虑是否可以不用或减少对属于这个区域内的代码的调用。在前一片文章中介绍了方法和内存评测工具的使用,但它们只能帮助我们找出究竟是哪段代码降低了程序的运行速度,下面的内容是参考了其他资料整理出来的优化代码的方法。

 

    代码优化的技术大致分为两个主要方面:高级优化,从使用的整体算法和结构出发进行的优化;低级优化,集中于孤立的代码片断(通常为方法中的代码)的优化。下面分别讨论两方面的优化:

一,高级优化

1,  感觉到就是真实

对于电影来说,我们通过摄像头看到的都是完美的,而在拍摄现场我们看到的却是木头,泡沫和胶带。所以对于电影来说,感觉到就是真实。

游戏也一样,只需要处理游戏需要的东西。在游戏开发的各个方面这都是实用的。把精力集中在使游戏有趣和完美运行的问题上,始终只做需要做的而丢弃其他的部分。

2,  不要创建对象

减少对象创建的总数量和频率,结果能够大大地提高游戏的性能。还必须小心在不经意的情况下产生String对象。

例如:graphics.drawString( 0,0,”Score:” +score  );

这一句代码会在每次被调用的时候产生一个新的String对象,在这里就是每一桢画面显示时都会产生新的String对象。因此最好是只是在分数改变的时候才构造这个String

3,  绘制屏幕

通常,在对游戏完成大量的优化工作以后,收获的将是一个大量时间耗费在屏幕绘图上的游戏。这是因为一个游戏的主要时耗大都集中在绘制图像的工作上(或其他的一些基本的绘图调用)。因此,如果一开始就可以避免绘制工作,那将是对游戏的很好的优化。

还有就是要减少屏幕绘制,循环检测屏幕图像是否在某个部分发生了改变,如果没有,就不要对那部分的屏幕进行更新。另一个方法就是增加绘制图像的尺寸来减少单独的绘制调用的次数。

4,  算法

最好的,也是使用最多的高级优化是对游戏的算法方面。

 

二,低级优化

1,  提前绘制复杂图像

我们已经知道,使用LCDUI绘制图像是很慢的,因此最好是能够避免这种绘制。其中的一个方法就是用一个预生成图像来减少复杂图像的绘制。进一步来讲,举例:将所有的游戏状态信息整合到一个面板中(得分,生命数,能量值等),然后对这些信息进行一次性同时更新。

2,  保持类和内存之间的平衡

产生新的类会增加JAR包文件的大小,因此应该尽量避免。有的时候增加了额外类的开销可能节省了额外的内存开销,这也是值得的。

3,  复杂值的预计算

节省运算的一个好方法就是对数值进行预运算,从而无需再调用大开销的计算方法。一个很好的例子就是:主窗口画布的高度和宽度就是很好的 缓存对象。例如:可以调用getHeight方法和getWidth方法一次,然后将它们的结果缓存起来,而不是在每一次绘图中都调用这两种方法。

4,  使用数组

在任何时候,只要可能,都应该使用数组而不是Vector,因为数组的运行速度更快。通常面临的唯一问题是,如果最初分配的数组空间不够大,将需要对数组的大小进行扩充。这可以做到,但它需要对整个数组进行重建。例如:

    Public final static int[ ] expandArray(int [] oldArray, int expandBy)

           {

                  int [ ] newArray = new int [oldArray.length + expandBy];

                  System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);

                  Return newArray;

}

      任何时候,都应该尽量使用一维数组。访问二维数组变量的速度只有访问一维数组变量的一半。当然,仍然可以访问二维数组的对象,只是需要加入一点点计算。例如,与其使用这条语句:

              world[y][x] = 0

       不如下面这条语句运行的快:

        world[y*tilesWide + x] = 0

这条语句通过行列的位置将数值转换成一维值,实现了对数组同一元素的访问。

5,  不要使用数组

呵呵,尽管数组的访问比Vector快,但仍然比直接访问变量要慢,因此如果可能就应该删除对数组的访问,或者为一些常用方法中的数组寻求其他能提高性能的办法。

6,  使用快速方法

并不是所有Java调用的方法在性能上都是相同的,方法声明方式的不同对性能会会产生很多的影响。可以使用的最快的方法类型是静态方法,因此应该尽可能多地将代码置于静态调用方法中。运行速度仅次于静态方法的是声明为final的方法。运行最慢的两种方法是在接口中定义的方法和用关键字synchronized声明的方法,必须尽可能地避免使用这些类型的方法。

7,  其他优化

1)异常处理非常缓慢,不要为一半的游戏逻辑使用异常,只用它们来报告真正的错误状态。

2)使用switch表达式比使用if条件语句块的速度要快。

3)尽可能避免使用String对象进行运算,使用StringBuffer

4)内嵌类的运行很慢,尽可能避免使用。

5)在完成一个引用的使用后将它设为null

6)不要浪费时间来将一个对象初始化为null0java虚拟机会替我们完成这样的初始化

7)多思考新方法,这会使我们的大脑运转的更快。

8)如果可能,尽量使用static,它们运行都很快。它同时适用于方法和域,这条规则就是,如果它可以是静态的,那么就把它声明为静态的。

9)避免类型转换。

10)程序优化的时候要有所取舍,要多捉摸了。大家有什么好的建议?一起来壮大吧。共同探讨:zxhwolfe@hotmail.com

 

参考资料:

J2ME游戏编程》

www.j2medev.com

 

 

 

附:关于j2me程序的调试

使用eclipseME+WTK2.1进行J2ME应用程序调试(debug)-- 引用mingjava的帖子。

选择windows->preferences->java->debug  不要选择suspend execution的前面两个选项,在debuger timeout选项中  第一个时间至少设置为15000ms  这样就可以调试了。



相关文章
· 科技奥运与计算机技术的应用[405]
· Electromedical[2669]
· 患者监控[2726]
· 基于TMS320LF2407A DSP的心电监护系统研究[3166]
· 用S3C2410实现三导联远程心电监护系统[3083]
热门评论排行
·VHDL设计中电路简化问题的
·ARM嵌入式系统基础教程(N
·江苏嵌入式Linux教育培训
·ARM处理器应用开发4步骤
·锐极LINUX驱动培训班定于

文章评论
    没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。更多评论
发表评论
  * 请先[登陆]再进行评论,谢谢。
评分: 1分 2分 3分 4分 5分
内容: *
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。
 
热点新闻 [更多]
 
避免危及半导体业 德出手挽
HP实验室展示集CMOS电路与忆阻器
全球第二大代工巨头伟创力瘦身应对金融
Vishay Silico
奥地利微电子发布全球首款具有嵌入式比
采用 4mm x
未来MEMS产业恐缩水 车
iSuppli发布08年半导体厂商初
飞兆半导体指控英飞凌专利侵权
全球三大晶圆代工巨头齐遇冷 
 
热门下载 [更多]
 
[ PCB设计] Protel99教程下载
[ ] 手把手学单片机20个例
[ ] 单片机做的智能台灯
[ ] 单片机入门书
[ ] linux系统移植开发文档
[ ] IC卡的读写程序
[ ] 8051单片机C语言彻底应用
[ 常用软件] 555定时器电路设计软件V1.2
[ 常用软件] 51定时器计算软件
[ ] ARM处理器应用开发4步骤
 
论坛新帖 [更多]
 
[原创]户用电热式热能量表的合...
嵌入式十三法则...
基于CPLD和单片机的任意波形...
电子行业的发展方向...
单片机-超低价专业PCB打样...
超低价专业PCB打样 双面板...
[原创]主题:移动开发平台的建...
[原创]正弦脉宽调制(SPWM...
[推荐]Agilent8590...
[推荐]HP8591E HP8...

 
赞助商 [更多]
 

ICP许可证号:[粤 05056597]
联系电话:010-82517432 82517615 传真: 010-82517615

版权所有 Copyright © 2006 嵌入式技术网