依稀還記得,try{}之後的**塊應盡量越少越好,難道**被try{}catch(){}包圍之後會降低執行效率嗎?
測試一下:
package exception;
public class testtry_catch
catch (exception e)
}public static boolean no_try_catch()
public static void main(string args)
}
下面是console輸出:
try_catch time : 4843 ms
no_try_catch time : 4683 ms
這麼多次,相差依然很小,在不會發生異常的情況下try_catch方法和no_try_catch方法執行的時間基本相差無幾,在即時編譯時try_catch方法比no_try_catch方法應花費稍多時間
下面再看乙個更有趣的,當把return type改為void 時,**:
package exception;
public class testtry_catch
catch (exception e)
}public static void no_try_catch()
public static void main(string args)
}
console 輸出:
try_catch time : 4772 ms
no_try_catch time : 4918 ms
try_catch 比no_try_catch花費的時間更少了,這該怎樣解釋呢?
讓方法進行一些計算吧,不去建立物件,因為可能會觸發gc,只是去計算一下1+1
package exception;
public class testtry_catch
catch (exception e)
}public static void no_try_catch()
public static void main(string args)
}
console輸出:
try_catch time : 4957 ms
no_try_catch time : 4934 ms
我開始懷疑 try{}catch(){}**塊越短越好 這句話的正確性了
下面測一下異常物件產的的耗時和普通物件產生的耗時比較:
package exception;
import exception.entity.my_exception;
public class new_object_exception
}
console輸出:
new my_exception time : 113 ms
new exception time : 144 ms
相差很小,乙個數量級,無視gc了
下面測一下丟擲異常到接收到異常的時間,**如下:
package exception;
import exception.entity.my_exception;
public class catch_exception
long current1 = system.currenttimemillis();
for (long i = 0l; i < time; i++)
catch (exception e)
}long current2 = system.currenttimemillis();
for (long i = 0l; i < time; i++)
catch (my_exception e)
}long current3 = system.currenttimemillis();
system.out.println("catch exception : " + (current2 - current1) + " ms");
system.out.println("catch my_exception : " + (current3 - current2) + " ms");
}}
console輸出:
catch exception : 77 ms
catch my_exception : 64 ms
貼一下jdk中throwable 類的getmessage(), getstacktrace()原始碼
getmessage():
public string getmessage()
detailmessage只是throwable類的乙個私有變數
private string detailmessage;
getstacktrace():
public stacktraceelement getstacktrace()
getourstacktrace():
private synchronized stacktraceelement getourstacktrace() else if (stacktrace == null)
return stacktrace;
}
如果不是自定義的異常物件,大概沒必要去調這個方法,如果不調這個方法丟擲異常,捕獲異常,貌似對效能也沒什麼影響
關於異常,各有各的想法吧
另外我的電腦配置:i5 win7 64位 4g記憶體, jdk : jdk1.7.0_10 b18 64位
Java Exception列印到日誌
工作需要把exception的內容列印到日誌裡,也就是把printstacktrace 輸出的內容轉到文字檔案內。這個方法放在平時用的寫log的靜態類裡方便使用。public class logutil final fileoutputstream fos new fileoutputstream ...
Java Exception和Error的區別
error類和exception類的父類都是throwable類,他們的區別是 error類一般是指與虛擬機器相關的問題,如系統崩潰,虛擬機器錯誤,記憶體空間不足,方法呼叫棧溢等。對於這類錯誤的導致的應用程式中斷,僅靠程式本身無法恢復和和預防,遇到這樣的錯誤,建議讓程式終止。exception類表示...
效能測試 效能測試步驟
針對此次庫內作業效能測試,梳理一下期間的工作流程 梳理已有的介面指令碼,確認需要做效能測試的幾個介面,即使用率高,對效能有要求的幾個主要介面。結合頁面的操作,和確認的介面,梳理具體的業務邏輯 同時,請開發人員部署了測試環境。測試環境的伺服器指標,盡量和生產環境一致。部署的時候,負載均衡等情況也盡量和...