提高android代碼效率的方法

這不算原創吧,也不是轉載,也不是翻譯。算是閱讀筆記吧。源於android的dev guide

http://developer.android.com/guide/practices/design/performance.html

開始


代碼優化的基本原則:

  • 只做應該做的
  • 內存能不申請就不申請

具體做法:


1. 明智地做優化
對於數據結構和算法的優化所產生的效果要比遵循這些條條框框的要好

2. 避免申請內存
  • 儘量不要在循環中新建對象,這樣會迫使vm總在gc
  • 用StringBuffer替代String做加運算。這樣就不會產生大量的中間對象了。String可是無法修改的
  • 截取String時,用subString()替代新建對象。因爲用subString()時,內部的char[]是共享的
  • 將一個類的數組切分成多個數組。也就是說一個類A含有{int a, int b},那麼將其分成a[]和b[]的執行效率要比A[]的高。但是這麼做不好維護吧~~
3. 關於JIT
  • JIT的優化會讓接口引用和直接引用的效率相同
  • JIT會讓值緩存和不緩存的效率相同(就是在for中緩存len一類的東西)
4. 不對對象域進行操作的方法要寫成static的

5. 私有域不要用Getter和Setter進行訪問
據說速度相差3x~7x

6. 常量用static final修飾
靜態常量會被寫入dex文件,在使用的時候直接被替換(類似與C中的宏吧);其他的域在調用的時候會去查類的域表,降低性能

7. 用foreach代替其他迭代方式
foreach在大部分情況下的執行效率是比較高的,而且還能避免指針越界等錯誤的發生。只有在用ArrayList的時候,手動迭代會比foreach快,3x多吧。

8. 內部類用package作用域替代private作用域
  • 對於private的內部類,使用外部域時會新建橋接類,而package作用域的內部類就不會有這個問題
  • 如果是對外公開接口的話,就最好將內部類寫成private了
9. 關於浮點數
  • float在計算的時候會比integer慢2x多
  • float和double在計算的時候速度一樣,只是double的空間佔用是2x
10. 儘量用庫函數
庫函數這個也就是遇到哪裏用到哪裏了。guide上說了兩個函數:String.indexOf()和System.arraycopy()
11. 少用JNI
JNI並不一定會比java代碼的效率更高。guide上建議除移植之外儘量不用JNI。或者說不要因爲提高效率而用JNI。
12. 優化後做性能對比
Guide上提的Caliper我怎麼用不了呢?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章