特定类型异常捕获速度比一般类型异常捕获更快吗?如果速度更快哪个比例?

时间:2010-07-02 07:28:45

标签: java exception exception-handling

我想知道特殊例外情况,例如NullPointerException ex比Exception ex更快。

例如,我的代码会抛出NullPointerException

try {
   ...
} catch (NullPointerException e) {
   ...
}

try {
   ...
} catch (Exception e) {
   ...
}

哪一个更快?我认为异常系统依赖于标志,因此特殊类型由于控制较少而更快。但我想知道。

如果答案是肯定的,为什么呢?感谢。

不是:您认为代码上没有任何崩溃。

1 个答案:

答案 0 :(得分:1)

通常的警告适用......确保你没有optimize prematurely。程序清晰而不是速度。如果程序太慢,请使用分析器来查找问题。

假设Java并没有抛出任何异常,它们同样快速。永远不会调用athrow操作,因此不会对异常表执行任何查找,也不需要进行异常类匹配。

如果在try语句中抛出一个异常,该异常处理程序将匹配异常,那么异常表查找将比一般异常类更快地匹配特定异常类略微,因为它不会爬上类层次结构来查找匹配的祖先类。稍微说,我的意思是你应该保存少于10个CPU指令,抛出异常应该是非常罕见的。

如果你抛出各种异常并且有多个catch块,那么情况就太复杂了,不能说它会更快或更慢地捕获单个共同的祖先类异常;这取决于细节。

Kaffe's exception.c中的函数findExceptionBlockInMethod显示了异常匹配代码的一个实现。