省略掉開場白,減少無謂的喟嘆,進入主題。以下的建議是來自<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
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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來模擬。
其他的建議就是緩存,雙緩沖之類的了。