我想知道特殊例外情况,例如NullPointerException
ex比Exception
ex更快。
例如,我的代码会抛出NullPointerException
try {
...
} catch (NullPointerException e) {
...
}
或
try {
...
} catch (Exception e) {
...
}
哪一个更快?我认为异常系统依赖于标志,因此特殊类型由于控制较少而更快。但我想知道。
如果答案是肯定的,为什么呢?感谢。
不是:您认为代码上没有任何崩溃。
答案 0 :(得分:1)
通常的警告适用......确保你没有optimize prematurely。程序清晰而不是速度。如果程序太慢,请使用分析器来查找问题。
假设Java并没有抛出任何异常,它们同样快速。永远不会调用athrow操作,因此不会对异常表执行任何查找,也不需要进行异常类匹配。
如果在try语句中抛出一个异常,该异常处理程序将匹配异常,那么异常表查找将比一般异常类更快地匹配特定异常类略微,因为它不会爬上类层次结构来查找匹配的祖先类。稍微说,我的意思是你应该保存少于10个CPU指令,抛出异常应该是非常罕见的。
如果你抛出各种异常并且有多个catch块,那么情况就太复杂了,不能说它会更快或更慢地捕获单个共同的祖先类异常;这取决于细节。
Kaffe's exception.c中的函数findExceptionBlockInMethod显示了异常匹配代码的一个实现。