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()。
二者聯合應用,都應當控制。