j2me提升性能_读书笔记

j2me提升性能_读书笔记

省略掉开场白,减少无谓的喟叹,进入主题。以下的建议是来自<symbian os j2me 编程指南>中关于怎么优化代码。
1.减少不必要的对象变量,因为其要在堆空间分配内存
2.字符串比较
    String a="now"; String b="now"; 那么,a==b可能返回真,因为jdk1.1并不保证只维持相同字符串的唯一拷贝。可以使用string.intern()方法强制解决问题,该方法返回一个字符串,保证字符串线程池中唯一。
    这样就可以使用==判断字符串比较。
3.字符串串联时使用stringbuffer ,并且需要给定初始大小。
4.hash表中的字符串键值
   字符串作为hash表中的键值,会调用到string的hashcode作为哈希值。但是,string.hashcode会每次都重新计算。可以仿照如下的keystring.当中将哈希码缓存起来,而不是每次创建,使用setkey可以重用一个keystring事例,避免不必要的对象创建。

 1 public   final   class  KeyString {
 2  private String key;
 3  private int hashCode;
 4   public KeyString(String key){
 5         setkey(key);
 6   }

 7   public void setKey(String key){
 8   this.key=key;
 9   hashcode=key.hashcode();
10   }

11   public int hashcode(){
12    return hashcode;
13   }

14   public boolean equals(Object obj){
15      if((obj instanceof KeyString))&&(key==((KeyString)(obj)).key)
16  return true;
17  }

18 
19}

5.容器
    使用hashtable 和vector的时候,给出初始容量大小。而stack由于没有支持设置容量的构造函数,可以使用setsize().
    对于hashtable的初始容量,建议设置成为素数。说是减少内存聚类。作者推荐89这个数字。
6. 循环
     使用i--更快速,因为循环比较符(>=)是直接编译进汇编器分支操作码的。
7.避免使用循环进行轮询,据说是,这样子能够避免耗电!
    boolean keepruning =false;
    public void run(){
         while(keepruning){
           
            }
    }
8.算术操作
    当前移动电话上使用的cpu并不能对除法和取摸提供硬件帮助,建议过多运用这些运算的程序考虑让除数是2的幂次,可以使用右移操作模拟除法,用掩码操作模拟取摸。
    比如 a%b可以使用a&0x1ff来模拟。
其他的建议就是缓存,双缓冲之类的了。

你可能感兴趣的:(j2me提升性能_读书笔记)