Java異常排行榜:哪個異常最常見?

前段時間寫了一篇關於異常的文章《 》,感覺不少同學比較感興趣,最近,發現國外有一個網站專門蒐集 Java 異常。

在該網站上,蒐集了大量 Java 程序崩潰時的堆棧跟蹤信息。我們幾乎能在這裡找到經常遇到的 Java 異常信息。該網站根據不同的標準對崩潰信息進行了分類處理,如異常類型,組件拋出的異常,以及這些異常的主要來源。

一般來說,你在該網站上查到的異常類型會按照不同堆棧信息及來源進行整理並返回結果,如下圖所示:

Java異常排行榜:哪個異常最常見?

最近,該網站對所有的異常數據進行了數據分析,分別按照如下三種不同的維度進行分析。

1、蒐集到的崩潰次數

Java異常排行榜:哪個異常最常見?

上圖為崩潰的次數的分析結果,我們可以發現,NullPointerException 毫無懸念是迄今為止最常見的異常。

2、出現與異常堆棧信息相關的網頁數

Java異常排行榜:哪個異常最常見?

同樣,NullPointerException 也是出現次數最多的異常。與之前的區別在於一個網頁可能會包含多個不同的堆棧跟蹤「例如,將多個堆棧跟蹤粘貼到單個 GitHub 問題中」。我們可以看到,異常類型的順序存在一些差異:例如,IllegalArgumentException 和 IllegalStateException 在網頁中出現的次數比它們在蒐集到的崩潰次數排名更靠前。

3、異常的報錯模式數

Java異常排行榜:哪個異常最常見?

我們可以看出,一些異常類型的排名低於第一個圖表;這意味著更少的報錯模式連接到它們,但這些報錯模式平均有更多的崩潰;比如 ClassNotFoundException、NullPointerException,它雖被許多開發人員共享,但收集的平均崩潰次數要少得多,通過下圖更能說明這一點。

Java異常排行榜:哪個異常最常見?

我們可以看出,在 NullPointerException 的情況下,有超過30,000個模式,每個模式連接崩潰少於10次,65個模式100-999次崩潰。在 ClassNotFoundException 的情況下,只有10000個模式的相關崩潰少於10個,但與 NullPointerExceptions 相比,有更多的模式和超過100次的崩潰。甚至有1000多個連接崩潰的模式,一個模式有超過10000個連接崩潰。

這個結果確實讓人很驚訝,引起這一現象的原因:調用導致 NullPointerException 引發崩潰的代碼是相當分散的,因為它們來自許多不同的庫,並且在出錯時立即生效,而 ClassNotFoundException 由 JVM 的標準機制生成,因此會導致許多堆棧信息具有相同的錯誤模式。

有人可能會認為,NullPointerException 和 ClassNotFoundException 都是如此基本的異常,以至於每個開發人員都知道如何輕鬆解決它們,但它們在論壇上頻繁出現的情況與此假設相矛盾,因為關於如何處理它們的方案會有所不同。在 NullPointerException 的情況下,很難寫出一些通用的解決方案,因為每個庫中的問題都不相同。在ClassNotFoundException 的情況下,很多開發人員都會遇到一些常見的報錯模式;當然,針對您使用的不同環境或框架有特定的解決方案,但提供的一般解決方案仍然有意義。

通過異常報錯模式數得出的結論是:即使有更多的 NullPointerException 異常,ClassNotFoundException 應該更靠前。

通過上面的圖表分析結果,相信你也遇到了上面出現的這些常見異常,無論該平臺按照那種方式進行分析,作為開發的我們,沒必要在意異常排名結果,只需關注常見的異常,並理解產生這些異常的原因!!!


分享到:


相關文章: