翻译: J2ME 代码优化

原文地址: http://wiki.forum.nokia.com/index.php/Java_ME_code_optimization

版权声明:语文能力有限,看不懂别找我。纯属免费,请随便转帖。别告诉别人是我写的。

 

J2ME 应用一般不像本地的C++应用一样运行。J2ME程序性能的降低总是体现在执行速度和内存这两个方面。(应用相关的一系列)因素例如I/O, 线程等有助于改进J2ME程序的性能。下面的一系列小建议是在考虑这些因素的基础上提出的,目的是为了提高J2ME应用的性能。

 

建议:

 

1. 创建对象和抛弃对象:

创建对象是既耗费内存又耗费性能的一件工作。仅当必要的时候采取创建对象,尽量不要在循环中创建对象。

例如:

2. Strings and StringBuffers

无论何时当你使用substring 或者 "+"运算符, 一个新的字符串对象就被创建了。所以如果你正在你的代码中操作字符串,例如:substring,字符串拼接, 请使用StringBuffer 或者char数组来完成这个工作。

 

3. 优化循环
原则1: 尽量使用for循环而不是while循环; 原则2:在循环条件中不要计算任何东西。

//下面是不好的代码

//下面是好的代码

4. 把你的程序分成部分

MIDP运行环境仅在需要时载入他们需要的类,因此把你的类从大类分成小类。

只import 你需要的类,不要使用通配符来引入类,例如:不是用java.util.* 而是 java.util.Date;

尽量保持一个类变量时public,这样就不必提供get方法和set方法,毕竟方法调用时需要耗费性能的。

(当然,如果仅仅是本类使用,请尽量保持private,这样一旦出了问题,调试方便)

5. 尽量不要用线程

无论何时请尽量不要使用线程,线程是内存和CPU的杀手。一些行为例如I/O是必须要用线程的,那就看看这个I/O是否避免(或者与已有线程合并)。

使用线程的时候通常会用到synchronized(同步),这会使性能降低2/3。

6. 避免频繁的打开RecordStores

如果使用RecordStores, 把对它的操作尽可能的集中放在一个位置, 这需要细心的设计。RecordStore的读写泛滥将严重影响性能。尽量通过细致设计减少RecordStore的open和close。

7. 重用GUI控件(略)

8. 针对变量的功能使用恰当的类型,这样避免浪费内存

9. 重用变量

尽可能的重用已有的变量,即使是程序段中的自动变量(例如通常的int i), 如果分配很多的话,也会拖慢速度并耗费内存。频繁的分配和释放变量必然导致性能的下降。当然,别用的太过分,毕竟把所有的变量都弄成全局的也是不可能的,而且也就没法设计了(意译)。

10.  数组滥用

把多维数组改为多个单位数组。多维数组的存取是性能杀手,尽量别用它们。

11. 计算

尽量用移位操作代替算术操作,例如int a = 11 << 1 代替 int a = 11 * 2;

尽可能的避免乘除运算的次数,它们比加减运算昂贵的多(注:在底层大概差一到两个数量级,也就是完成一次乘法操作的时间,足以完成10~100次加减法,甚至更多,臆测,未考证)。尽量用加减代替乘除。

12. 尽量使用已有的库中的函数功能(注:已有的函数除了bug比较少外,性能上肯定已经过几代的优化)。

例如在字符串中搜索,没必要自己写方法,尽量用String.indexOf或者String.lastIndexOf();

13. 内部类

For inner classes choose package scope with static.(在说鸟语,没看懂)

使用混淆器混淆代码,会提高性能

不要自己主动gc: System.gc()

14. 尽可能的降低循环次数

虽然循环让人生变得美好,但美好本身就是既耗费性能的东东。如果循环次数已知,那么通过增加循环语句减少循环次数,会提高性能(这个有点悬)。

例如:

上面的代码可以这么干:

(注:的确有人在研究是用循环还是把代码直接扩展出来,哪个效率高些,不过俺总觉得这个属于玩花活的范畴,不敢苟同)

 

15. 尽量别用多态

多态在Java里真是个好东西,能干好多事(请幻想所有的设计模式), 但是多态调用在Java调用中是花费最大的调用。最便宜的是static方法,当然俺也不是说让你把所有方法都整成static的,那样就啥也干不了的。

 

 

原文地址: http://wiki.forum.nokia.com/index.php/Java_ME_code_optimization

 

版权声明: 语文能力有限,看不懂别找我。纯属免费,请随便转帖。别告诉别人是我写的。

 

有错字请告诉我,我改!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值