您的位置:首頁>正文

談談代碼性能優化中的一些小細節

今天針對我們日常代碼中的一些小細節, 談談我們可以優化的地方, 希望對大家有用。

迴圈優化

明確一個概念, 對方法的調用,

即使方法中只有一句語句, 也是有消耗的, 包括創建棧幀、調用方法時保護現場、調用方法完畢時恢復現場等。 所以例如下面的操作:

for (int i = 0; i < list.size(); i++)

{

...

}

建議替換為:

for (int i = 0, int length = list.size(); i < length; i++)

{

...

}

除此之外, 如果在迴圈結構中, 存在迴圈元素無關的邏輯判斷條件的計算, 比如 if(A > B && B > C)建議改為if(conditionD)。

2. 將迴圈變數無關的計算都放到迴圈外, 這一條不解釋。

3. 不要在迴圈中使用try…catch…, 應該把其放在最外層。 主要原因在於, 如果迴圈中出現exception, try..catch在外層就直接跳出了迴圈, 否則執行中拋出異常就會繼續迴圈。

4.迴圈內不要不斷創建物件引用

例如:

for (int i = 1; i <= count; i++)

{

Object obj = new Object();

}

這種做法會導致記憶體中有count份Object物件引用存在, count很大的話, 就耗費記憶體了, 建議為改為:

Object obj = null;

for (int i = 0; i <= count; i++)

{

obj = new Object();

}

邏輯判斷優化

1. 儘量採用“懶載入”的策略, 即在需要的時候才創建

例如:

String str = "forest";

if (i == 1)

{

list.add(str);

}

建議替換為:

if (i == 1)

{

String str = "forest";

list.add(str);

}

2. switch 語句按照出現頻率排序, 讓最常用的放在最前面, 減少無效判斷。

3. if 語句將弱計算的條件放在前面, 避免過多的計算。

4. 字串變數和字串常量equals的時候將字串常量寫在前面,這是一個比較常見的小技巧了。 例如:

String str = "forest";

if (str.equals("forest"))

{

...

}

建議修改為:

String str = "forest";

if ("forest".equals(str))

{

...

}

運算式優化

降低計算強度,乘法和除法使用移位操作, 使用移位元代替整數2的倍數的乘除,

使用位運算代替取餘運算。

例如:

for (val = 0; val < 100000; val += 5)

{

a = val * 8;

b = val / 2;

}

用移位操作可以極大地提高性能, 因為在電腦底層, 對位元的操作是最方便、最快的, 因此建議修改為:

for (val = 0; val < 100000; val += 5)

{

a = val << 3;

b = val >> 1;

}

2. 布林邏輯優化, 這一條也是平時大家不太注意的細節, 例如, !a && !b 轉換為!(a || b) , 會減少程式很大的計算量。

一點小結

代碼中可以優化的點, 其實還有很多了, 舉這幾個例子的目的,

就是想說明一點, 多思考, 多留心每一條語句執行背後的細節, 就可以有很大的收穫和提高。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示