優(yōu)化android程序

優(yōu)化java代碼


1.盡量使用static和final修飾符

對于一些固定的類和方法盡量使用static修飾符,調(diào)用靜態(tài)方法的效率是最高的,而且可以減少空間占用。
final修飾符有“無法改變”的含義,final的變量值不可以修改,final修飾的方法不可以被覆蓋,final的類無法被派生。適當?shù)氖褂胒inal修飾符不僅可以保護重要邏輯或者數(shù)據(jù),還可以提高程序的執(zhí)行效率。

2.盡量使用局部變量

調(diào)用方法邏輯是創(chuàng)建的局部變量 速度要靜態(tài)變量和示例變量要快許多

3.不要過度依賴GC

在短時間沒大量的創(chuàng)建對象又可能會消耗過多的系統(tǒng)內(nèi)存,從而導致內(nèi)存泄漏,我們要及時回收不再使用的對象和資源。
常見的回收方式實在變量或者對象使用完之后,將其手動設為null

4.優(yōu)化循環(huán)語句

首先是要避免重復運算

//錯誤寫法
for(int i = 0; i < vector.size(); i++){
    ...
}
//正確寫法
int size=vector.size();
for(int i = 0; i < size; i++){
    ...
}

錯誤寫法中vector對象的size方法在每次循環(huán)判斷中都會調(diào)用,雖然該方法執(zhí)行起來很快,但是疊加起來性能耗損是很可怕的。

其次,在循環(huán)邏輯中應該避免使用一些開銷大的操作 如 創(chuàng)建對象
捕獲異常等。進行邏輯計算時應該盡量使用基本數(shù)據(jù)類型,不如int 數(shù)組
string數(shù)組。變量或?qū)ο笫褂煤笞⒁赓Y源回收

5.慎用異常機制

執(zhí)行異常捕獲語句(try catch)和拋出異常(throw)的代價很高。
使用異常機制盡量把捕獲邏輯放在最外層,并且只用于錯誤處理,不要用于程序邏輯。

6.基本數(shù)字類型運算

java語言中基本數(shù)字類型有 byte,short,int,long,float,double,運算方式有加,減,乘,除,位移,布爾運算

進行計算邏輯需要注意:
- 運算速度從快到慢依次是int,short,byte,long,double
- 除法比乘法慢太多,基本上除法的運算時間是乘法的9倍
-long類型的計算很慢,建議少用
-double運算速度和float相當

** 7.字符串操作使用StringBuffer提升效率 **

//低效寫法
String appendStr = "test";
int times = 10000;
String str = "";
for(int i = 0; i< times; i++){
    str+=appendStr;
}
//高效寫法
Stirng appendStr = "test";
int times = 10000;
StringBuffer sb=new StringBuffer();
for(int i = 0; i< times; i++){
    sb.append(appendStr);
}

8.合理使用數(shù)據(jù)集合

java的數(shù)據(jù)集合可分為兩種類型,即集合結(jié)構(Collection)和圖表結(jié)構(Map),下面還包括了列表(List),棧(Stack),散列(HashMap)等

Collection
|- List
| |- LinkedList (雙向鏈表)
| |- ArrayList (高級數(shù)組)
| |_ Vector (線程安全)
| |_ Stack
|_ Set

Map
|- Hashtable (線程安全)
|- HashMap
|_ WeakHashMap

其中最常使用的是ArrayList ,該數(shù)據(jù)集合其實就是一個可變大小的數(shù)組,其次是LinkedList ,該集合用于實現(xiàn)棧(stack),隊列(queue),雙向隊列(deque)。Hashtable是同步的 線程安全 。這些應該盡量使用ArrayList和HashMap,謹慎使用Vector和HashTable ,應為后兩者為了保證線程安全而使用同步機制,系統(tǒng)開銷比較大

編碼時盡量使用原生的數(shù)據(jù)結(jié)構如數(shù)組,枚舉

9.使用clone替代new

//低效用法
public static Blog getNewBlog(){
    return new Blog();
}
//高效用法
public static Blog baseBlog = new Blog();
public static Blog getNewBlog (){
    return (Blog) baseBlog.clone();
} 

10.慎用public static final

-如果一個變量或者數(shù)據(jù)被這樣聲明,那么我們就不能對這個變量進行任何修改了,這種數(shù)組也無法進行增刪改查 以及排序等操作
-這種聲明的數(shù)據(jù)在整個進程被銷毀之前都會常駐內(nèi)存,使用不當有可能會引起一些性能問題。

11.采用對象池提高效率

創(chuàng)建和釋放對象會占用比較大的系統(tǒng)資源 即把常用的對象存放在一個對象池(對象集合)中,通過一定的策略高效調(diào)用已經(jīng)存在的對象,避免大量的創(chuàng)建對象或銷毀對象
對象池 如數(shù)據(jù)庫連接池 線程池

12.不要過度使用OOP

善于使用語言中的工具類
使用Log打印日志的系統(tǒng)資源開銷也是不小的,在正式發(fā)布應用之前應該把程序中的Log調(diào)試代碼關閉

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內(nèi)部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,741評論 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,816評論 0 11
  • 聽到腳步聲連忙將被子拽到下巴處,只露出一個腦袋看著趙書茗。趙書茗左手扣著右邊袖口的扣子,神清氣爽的看了眼露出一顆毛...
    亞珈昱閱讀 508評論 0 0
  • 足弓是一個緩沖結(jié)構, 不是支撐結(jié)構:負重的時候,足弓是變形塌陷的,與此同時,足與地面的接觸面積增加,單位面積的壓力...
    復園堂俞姐閱讀 156評論 0 0

友情鏈接更多精彩內(nèi)容