歡迎光臨
每天分享高質量文章

Java 中的 try catch 影響效能嗎?

點選上方“Java技術驛站”,選擇“置頂公眾號”。

有內涵、有價值的文章第一時間送達!

精品專欄

 

前幾天在 code review 時發現有一段程式碼中存在濫用 try catch 的現象。其實這種行為我們也許都經歷過,剛參加工作想儘量避免出現崩潰問題,因此在很多地方都想著 try catch 一下。

但實際上這種習慣不僅會讓程式碼很難看,更會影響程式碼的執行效能。有些人會覺得,不就是一個 try catch 麼,怎麼會影響效能啊。那就讓我們來測試看看吧。

實驗

首先,我們看看沒有 try-catch 情況下,進行 100 萬次加法的耗時:

  1. long start = System.nanoTime();

  2. int a = 0;

  3. for (int i = 0; i < 1000000; i++) {

  4.     a++;

  5. }

  6. System.out.println(System.nanoTime() - start);

經過5次統計,其平均耗時為:1816048 納秒,即 1.8 毫秒。

接著,我們來看看在有 try-catch 情況下,進行 100 萬次加法的耗時:

  1. long start = System.nanoTime();

  2. int a = 0;

  3. for (int i = 0; i < 1000000; i++) {

  4.     try {

  5.         a++;

  6.     } catch (Exception e) {

  7.         e.printStackTrace();

  8.     }

  9. } 

  10. System.out.println(System.nanoTime() - start);

經過5次統計,其平均耗時為: 1928394 納秒,即 1.9 毫秒。

我們再來看看,如果 try-catch 丟擲異常,進行 100 萬次加法的耗時:

  1. long start = System.nanoTime();

  2. int a = 0;

  3. for (int i = 0; i < 1000000; i++) {

  4.     try {

  5.         a++;

  6.         throw new Exception();

  7.     } catch (Exception e) {

  8.         e.printStackTrace();

  9.     }

  10. } 

  11. 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】—– IOC 之 Spring 統一資源載入策略

【死磕 Spring】—– IOC 之深入理解 Spring IoC

贊(0)

分享創造快樂