国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Java----代碼優(yōu)化篇

2019-11-14 15:03:11
字體:
供稿:網(wǎng)友

一、咱們之所以這么干的目的:  

  1.效率(最重要)

  2.可讀性,便于后期維護。(同樣很重要)

 

二、代碼優(yōu)化的要求:

  1.減小代碼的體積。

  2.提高代碼的運行效率。

 

三、常用的代碼的優(yōu)化:

  1、盡量重用對象

    特別是String對象的重用。最常用的就是字符串的拼接:

        當(dāng)遇到頻繁擦拼接String時。記住一定用StringBuilder/StringBuffer

    例如:

1     ArrayList<String> list;2     //省去list初始化。3     StringBuilder builder = new StringBuilder();4     5     for (String s : list) {6         builder.append(s);7     }8     String result = builder.toString();

    原因:java虛擬機不僅要花時間生成對象,而且還要花時間處理和回收對象,生成過多對象必定會給程序性能帶來影響。

                
  2. 盡可能使用局部變量 :

    局部變量在棧中創(chuàng)建,創(chuàng)建速度快,用完即自動消失,不需要額外的垃圾回收。

    而靜態(tài)變量、實例變量等在堆中創(chuàng)建,創(chuàng)建速度慢,同時還依賴Java垃圾回收機制處理。
       

  

  3. 及時關(guān)閉流 :

    Java程序開發(fā)中,在對I/O,數(shù)據(jù)庫操作結(jié)束后,一定要記住關(guān)閉流。

    原因:未關(guān)閉流會對系統(tǒng)造成很大的開銷,甚至?xí)?shù)據(jù)造成嚴(yán)重的后果。
            
     

  4. 使用懶加載

    懶加載 : 當(dāng)要用的時候才創(chuàng)建該對象。

    例如:
           

1     String PRefix = "gebi";2     3     if ("laowang".equals(name)) {4         list.add(prefix + name);5     }

           替換為:

1     if("laowang".equals(name)) {2         String prefix = "gebi";3         list.add(prefix + name);4     }

                      

  5.避免在循環(huán)中使用try...catch,在循環(huán)外層使用try...catch
            
  

  6.try...catch不宜太大。

    不要將無用代碼,即不會拋出異常的代碼統(tǒng)統(tǒng)放入try...catch塊中,減小try...catch代碼塊的大小。

    保證代碼的可讀性,易維護性,健壯性。

  

  7.循環(huán)內(nèi)盡量避免創(chuàng)建對象的引用。

    尤其是循環(huán)量大的時候。

1     while (i<1000) {2         Object object = new Object();3     }

            建議修改為:

1     Object object = null;2             3     while (i<1000) {4         object = new Object();

    每次new Object()的時候,Object對象引用指向Object對象。

    當(dāng)循環(huán)次數(shù)多的時候,如第一種,JVM會創(chuàng)建1000個對象的引用,而第二種內(nèi)存中只有一份Object對象引用。這樣就大大節(jié)省了內(nèi)存空間了。
           

  8.不要隨意使用static變量。

    當(dāng)對象被聲明為static的變量所引用時,此時,Java垃圾回收器不會清理這個對象所占用的堆內(nèi)存。

    靜態(tài)變量所占用的堆內(nèi)存直到該變量所在類所在程序結(jié)束才被釋放。 即靜態(tài)變量生命周期=類生命周期。
        
     

  9.不要創(chuàng)建一些不使用的對象,不要導(dǎo)入一些不使用的類。
        
     

  10.使用帶緩沖的I/O流:

    帶緩沖的I/O流可以極大提高I/O效率。BufferedWriter, BufferedReader, BufferedInputStream, BufferedOutputStream。
        
     

  11.包裝類數(shù)據(jù)轉(zhuǎn)換為字符串使用: toString  

    Integer i = 1;

     包裝類數(shù)據(jù)轉(zhuǎn)換為字符串方法速度排名 :

       i.toString > String.valueOf(i) > "" + i  

  

  12.Map遍歷效率 : entrySet > keySet

 1     //entrySet() 2     for (Entry<String, String> entry : map.entrySet()) { 3         String key = entry.getKey(); 4         String value = entry.getValue(); 5         System.out.println(key + " : " + value); 6     } 7      8     //上下對比 9     10     //keySet()11     for (String key : map.keySet()) {12     String value = map.get(key);13     System.out.println(key + " : " + value);14     }    

  

  13.關(guān)于Iterator與forEach()的集合遍歷舍取。

    算法導(dǎo)論上說:算法是為了提高空間效率和時間效率。但往往時間和空間不能并存。

    時間效率:Iterator > forEach()

    代碼可讀性 : forEach() > Iterator
                

 1     //Iterator 2     Set<Entry<String, String>> entrySet = map.entrySet(); 3     Iterator<Entry<String, String>> iter = entrySet.iterator(); 4       5     while (iter.hasNext()) { 6         Entry<String, String> entry = iter.next(); 7         String key = entry.getKey(); 8         String value = entry.getValue(); 9         System.out.println(key + " : " + value);10      } 

    對比:

1     //forEach()2     for (Entry<String, String> entry : map.entrySet()) {3         String key = entry.getKey();4         String value = entry.getValue();5         System.out.println(key + " : " + value);6     }

            個人認(rèn)為:當(dāng)處理大數(shù)據(jù)時推薦使用Iterator遍歷集合。

         但處理小數(shù)據(jù)的話,為了可讀性和后期維護還是使用forEach()。

         兩者結(jié)合使用,都應(yīng)該掌握。
           


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 陇西县| 确山县| 屏东市| 沙雅县| 招远市| 商河县| 德州市| 琼海市| 楚雄市| 台中县| 陇西县| 班戈县| 镇江市| 溧水县| 大丰市| 台东市| 孝昌县| 新巴尔虎左旗| 延寿县| 莒南县| 孟连| 齐齐哈尔市| 高清| 巴东县| 隆德县| 怀宁县| 宁蒗| 武强县| 津市市| 民丰县| 巫山县| 定安县| 临朐县| 鄂托克旗| 潜山县| 德令哈市| 通许县| 定州市| 英德市| 彰化县| 台湾省|