點選上方“Java技術驛站”,選擇“置頂公眾號”。
有內涵、有價值的文章第一時間送達!
精品專欄
前幾天在 code review 時發現有一段程式碼中存在濫用 try catch 的現象。其實這種行為我們也許都經歷過,剛參加工作想儘量避免出現崩潰問題,因此在很多地方都想著 try catch 一下。
但實際上這種習慣不僅會讓程式碼很難看,更會影響程式碼的執行效能。有些人會覺得,不就是一個 try catch 麼,怎麼會影響效能啊。那就讓我們來測試看看吧。
實驗
首先,我們看看沒有 try-catch 情況下,進行 100 萬次加法的耗時:
long start = System.nanoTime();
int a = 0;
for (int i = 0; i < 1000000; i++) {
a++;
}
System.out.println(System.nanoTime() - start);
經過5次統計,其平均耗時為:1816048 納秒,即 1.8 毫秒。
接著,我們來看看在有 try-catch 情況下,進行 100 萬次加法的耗時:
long start = System.nanoTime();
int a = 0;
for (int i = 0; i < 1000000; i++) {
try {
a++;
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println(System.nanoTime() - start);
經過5次統計,其平均耗時為: 1928394 納秒,即 1.9 毫秒。
我們再來看看,如果 try-catch 丟擲異常,進行 100 萬次加法的耗時:
long start = System.nanoTime();
int a = 0;
for (int i = 0; i < 1000000; i++) {
try {
a++;
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println(System.nanoTime() - start);
經過 5 次統計,其平均耗時為:780950471 納秒,即 780 毫秒。
經過上面三次統計,我們可以看到在沒有 try catch 時,耗時 1.8 毫秒。在有 try catch 但是沒有丟擲異常,耗時 1.9 毫秒。在有丟擲異常,耗時 780 毫秒。我們能得出一個結論:如果 try catch 沒有丟擲異常,那麼其對效能幾乎沒有影響。但如果丟擲異常,那對程式將造成幾百倍的效能影響。
結論
雖然在沒有丟擲異常時,try catch 幾乎沒有效能影響。但是一旦丟擲異常,那麼其對效能的影響將是巨大的。因此我們在實際程式設計的時候,需要特別註意 try catch 陳述句的使用,不在沒有必要的地方過多使用。
推薦作者公眾號,歡迎關註
【死磕 Spring】—– IOC 之 獲取 Document 物件
【死磕 Spring】—– IOC 之 註冊 BeanDefinition
【死磕 Spring】—– IOC 之 Spring 統一資源載入策略
【死磕 Spring】—– IOC 之深入理解 Spring IoC