程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java編程代碼機能優化

Java編程代碼機能優化

編輯:關於JAVA

Java編程代碼機能優化。本站提示廣大學習愛好者:(Java編程代碼機能優化)文章只能為提供參考,不一定能成為您想要的結果。以下是Java編程代碼機能優化正文


1、我們之所以這麼干的目標:  

  1.效力(最主要)

  2.可讀性,便於前期保護。(異樣很主要)

2、代碼優化的請求:

  1.減小代碼的體積。

  2.進步代碼的運轉效力。

3、經常使用的代碼的優化:

  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. 盡量應用部分變量 :

    部分變量在棧中創立,創立速度快,用完即主動消逝,不須要額定的渣滓收受接管。

    而靜態變量、實例變量等在堆中創立,創立速度慢,同時還依附Java渣滓收受接管機制處置。

  3. 實時封閉流 :

    Java法式開辟中,在對I/O,數據庫操作停止後,必定要記住封閉流。

    緣由:未封閉流會對體系形成很年夜的開支,乃至會對數據形成嚴重的效果。

  4. 應用懶加載

    懶加載 : 當要用的時刻才創立該對象。

    例如:

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

           調換為:

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

  5.防止在輪回中應用try...catch,在輪回外層應用try...catch

  6.try...catch不宜太年夜。

    不要將無用代碼,即不會拋出異常的代碼一切放入try...catch塊中,減小try...catch代碼塊的年夜小。

    包管代碼的可讀性,易保護性,硬朗性。

  7.輪回內盡可能防止創立對象的援用。

    特別是輪回量年夜的時刻。

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

            建議修正為:

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

    每次new Object()的時刻,Object對象援用指向Object對象。

    當輪回次數多的時刻,如第一種,JVM會創立1000個對象的援用,而第二種內存中只要一份Object對象援用。如許就年夜年夜節儉了內存空間了。

  8.不要隨便應用static變量。

    當對象被聲明為static的變量所援用時,此時,Java渣滓收受接管器不會清算這個對象所占用的堆內存。

    靜態變量所占用的堆內存直到該變量地點類地點法式停止才被釋放。 即靜態變量性命周期=類性命周期。

  9.不要創立一些不應用的對象,不要導入一些不應用的類。

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

    帶緩沖的I/O流可以極年夜進步I/O效力。BufferedWriter, BufferedReader, BufferedInputStream, BufferedOutputStream。

  11.包裝類數據轉換為字符串應用: toString  

    Integer i = 1;

     包裝類數據轉換為字符串辦法速度排名 :

       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);
  }

            小我以為:當處置年夜數據時推舉應用Iterator遍歷聚集。

         但處置小數據的話,為了可讀性和前期保護照樣應用forEach()。

         二者聯合應用,都應當控制。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved