java Exception 效能問題

2021-09-01 16:46:28 字數 2921 閱讀 2195

依稀還記得,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類表示...

效能測試 效能測試步驟

針對此次庫內作業效能測試,梳理一下期間的工作流程 梳理已有的介面指令碼,確認需要做效能測試的幾個介面,即使用率高,對效能有要求的幾個主要介面。結合頁面的操作,和確認的介面,梳理具體的業務邏輯 同時,請開發人員部署了測試環境。測試環境的伺服器指標,盡量和生產環境一致。部署的時候,負載均衡等情況也盡量和...