最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java編程代碼性能優(yōu)化

 更新時間:2015年11月19日 10:07:02   投稿:hebedich  
本文介紹了 Java 代碼優(yōu)化的過程,總結了優(yōu)化 Java 程序的一些最佳實踐,分析了進行優(yōu)化的方法,并解釋了性能提升的原因,需要的朋友可以參考下

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

  1.效率(最重要)

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

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

  1.減小代碼的體積。

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

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

  1、盡量重用對象 :

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

        當遇到頻繁擦拼接String時。記住一定用StringBuilder/StringBuffer

    例如:

  ArrayList<String> list;
  //省去list初始化。
  StringBuilder builder = new StringBuilder(); 
  for (String s : list) {
    builder.append(s);
  }
  String result = builder.toString();

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

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

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

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

  3. 及時關閉流 :

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

    原因:未關閉流會對系統(tǒng)造成很大的開銷,甚至會對數(shù)據(jù)造成嚴重的后果。

  4. 使用懶加載

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

    例如:

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

           替換為:

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

  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)量大的時候。

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

            建議修改為:

  Object object = null;
  while (i<1000) {
    object = new Object();

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

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

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

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

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

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

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

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

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

    Integer i = 1;

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

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

  12.Map遍歷效率 : entrySet > keySet

  //entrySet()
  for (Entry<String, String> entry : map.entrySet()) {
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key + " : " + value);
  }
  
  //上下對比
  
  //keySet()
  for (String key : map.keySet()) {
  String value = map.get(key);
  System.out.println(key + " : " + value);
  } 

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

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

    時間效率:Iterator > forEach()

    代碼可讀性 : forEach() > Iterator

  //Iterator
  Set<Entry<String, String>> entrySet = map.entrySet();
  Iterator<Entry<String, String>> iter = entrySet.iterator();
   
  while (iter.hasNext()) {
    Entry<String, String> entry = iter.next();
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key + " : " + value);
   } 

    對比:

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

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

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

         兩者結合使用,都應該掌握。

相關文章

  • 5個Java API使用技巧

    5個Java API使用技巧

    這篇文章主要為大家詳細介紹了Java API安全和性能方面的簡單易用技巧,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • SpringBoot整合Lucene實現(xiàn)全文檢索的詳細步驟

    SpringBoot整合Lucene實現(xiàn)全文檢索的詳細步驟

    全文搜索(Full-Text?Search)是指對大規(guī)模存儲在計算機系統(tǒng)中的文本數(shù)據(jù)進行檢索和匹配的技術,它允許用戶輸入關鍵字,然后從海量的文本數(shù)據(jù)中快速找到相關的信息,本文介紹了SpringBoot整合Lucene實現(xiàn)全文檢索的詳細步驟,需要的朋友可以參考下
    2024-03-03
  • 詳解JFX11+IDEA跨平臺打包發(fā)布的完美解決辦法

    詳解JFX11+IDEA跨平臺打包發(fā)布的完美解決辦法

    這篇文章主要介紹了詳解JFX11+IDEA跨平臺打包發(fā)布的完美解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • IntelliJ IDEA 小技巧之Bookmark(書簽)的使用

    IntelliJ IDEA 小技巧之Bookmark(書簽)的使用

    這篇文章主要介紹了IntelliJ IDEA 小技巧之Bookmark(書簽)的使用,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot實現(xiàn)異步任務的項目實踐

    SpringBoot實現(xiàn)異步任務的項目實踐

    本文將使用SpringBoot 去實現(xiàn)異步之間的調用,提高系統(tǒng)的并發(fā)性能、用戶體驗,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • Java中使用jaxp進行sax解析_動力節(jié)點Java學院整理

    Java中使用jaxp進行sax解析_動力節(jié)點Java學院整理

    使用SAX的優(yōu)勢在于其解析速度較快,相對于DOM而言占用內(nèi)存較少。這篇文章主要介紹了Java中使用jaxp進行sax解析,需要的朋友可以參考下
    2017-08-08
  • springboot如何實現(xiàn)前后端分離跨域訪問

    springboot如何實現(xiàn)前后端分離跨域訪問

    這篇文章主要介紹了springboot如何實現(xiàn)前后端分離跨域訪問問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot集成FTP文件服務器簡單應用方式

    SpringBoot集成FTP文件服務器簡單應用方式

    這篇文章主要介紹了SpringBoot集成FTP文件服務器簡單應用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • SpringBoot自動配置@EnableAutoConfiguration過程示例

    SpringBoot自動配置@EnableAutoConfiguration過程示例

    這篇文章主要為大家介紹了SpringBoot自動配置@EnableAutoConfiguration的過程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Java實現(xiàn)輸出數(shù)字三角形實例代碼

    Java實現(xiàn)輸出數(shù)字三角形實例代碼

    大家好,本篇文章主要講的是Java實現(xiàn)輸出三角形實例代碼,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01

最新評論

迁安市| 山东省| 雷州市| 襄城县| 天镇县| 离岛区| 肇庆市| 文成县| 娄烦县| 黄石市| 宜章县| 陵水| 洪洞县| 宜丰县| 娄底市| 青海省| 阳城县| 恩平市| 永兴县| 邓州市| 安阳市| 铅山县| 自治县| 巫山县| 社旗县| 滨州市| 盐城市| 灵台县| 桂林市| 前郭尔| 桑植县| 遂昌县| 五家渠市| 湘阴县| 北票市| 萨嘎县| 安图县| 准格尔旗| 平谷区| 秭归县| 从江县|