Java----代码优化篇
一、咱們之所以這么干的目的:
1.效率(最重要)
2.可讀性,便于后期維護。(同樣很重要)
?
二、代碼優化的要求:
1.減小代碼的體積。
2.提高代碼的運行效率。
?
三、常用的代碼的優化:
1、盡量重用對象 :
特別是String對象的重用。最常用的就是字符串的拼接:
當遇到頻繁擦拼接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. 盡可能使用局部變量 :
局部變量在棧中創建,創建速度快,用完即自動消失,不需要額外的垃圾回收。
而靜態變量、實例變量等在堆中創建,創建速度慢,同時還依賴Java垃圾回收機制處理。
?? ????
3. 及時關閉流 :
Java程序開發中,在對I/O,數據庫操作結束后,一定要記住關閉流。
原因:未關閉流會對系統造成很大的開銷,甚至會對數據造成嚴重的后果。
?? ??? ??? ?
?? ??
4. 使用懶加載
懶加載 : 當要用的時候才創建該對象。
例如:
?? ??? ????
?? ??? ? 替換為:
1 if("laowang".equals(name)) { 2 String prefix = "gebi"; 3 list.add(prefix + name); 4 }?? ??? ??? ?? ??? ????
5.避免在循環中使用try...catch,在循環外層使用try...catch
?? ??? ??? ?
6.try...catch不宜太大。
不要將無用代碼,即不會拋出異常的代碼統統放入try...catch塊中,減小try...catch代碼塊的大小。
保證代碼的可讀性,易維護性,健壯性。
7.循環內盡量避免創建對象的引用。
尤其是循環量大的時候。
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對象。
當循環次數多的時候,如第一種,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
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.關于Iterator與forEach()的集合遍歷舍取。
算法導論上說:算法是為了提高空間效率和時間效率。但往往時間和空間不能并存。
時間效率:Iterator > forEach()
代碼可讀性 : forEach() > Iterator
?? ??? ????
對比:
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 }?? ??? ???? 個人認為:當處理大數據時推薦使用Iterator遍歷集合。
但處理小數據的話,為了可讀性和后期維護還是使用forEach()。
兩者結合使用,都應該掌握。
?? ??? ????
轉載于:https://www.cnblogs.com/liuxinwei/p/4975845.html
總結
以上是生活随笔為你收集整理的Java----代码优化篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu - 14.04,如何操作G
- 下一篇: SQL查询除了某一列的其他列