簡體   English   中英

捕獲特定異常比捕獲通用異常更便宜嗎?

[英]Is catching a specific exception less expensive than catching a generic one?

假設我正在將一個位圖加載到我的Android設備上。 可以拋出許多可能的異常。 為簡單起見,我們采用NullPointerExceptionOutOfMemoryError

現在我有兩段代碼。

代碼1

try{
//load the bitmap
}
catch(Exception e)
{
//do something
}

代碼2

try{
//load the bitmap
catch (NullPointerException e)
{
//do something
}
catch(OutOfMemoryError e)
{
//do something else
}

一段代碼比其他性能更有效嗎? 如果是這樣,為什么?

字節碼的角度來看 ,第一個更有效(更少的代碼)。

但是你永遠不應該以這種方式看待表現。

如果您對所有類型的異常具有相同的行為,則應該使用第一組代碼,以任何其他方式,第二組代碼。

在字節代碼中,您有以下代碼負責捕獲eceptions:

   L2
    LINENUMBER 7 L2
   FRAME SAME1 java/lang/NullPointerException
    ASTORE 1
    GOTO L4
   L3
    LINENUMBER 9 L3
   FRAME SAME1 java/lang/Exception
    ASTORE 1
   L4

因此,每個例外都有一個代碼,負責捕獲它,但正如我所說,這是一個微小的差異,不應該考慮它。

性能方面沒有區別,因為即使在多個catch塊的情況下也只會執行一個catch。

代碼明智,是首先一個更好,因為Michal說。 好的做法明智的第二種方法更好,因為您能夠捕獲特定的異常並適當地處理它們。

旁注:永遠不要記住內存錯誤,它的錯誤也不例外,你無法有效地處理它

如果每個例外都有不同的行為,第二個行為優於第一個。

表演將是相同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM