Java 特定类型异常捕获是否比一般类型异常捕获快?如果快,则比率是多少?

Java 特定类型异常捕获是否比一般类型异常捕获快?如果快,则比率是多少?,java,exception,exception-handling,Java,Exception,Exception Handling,我想知道像NullPointerExceptionex这样的特殊异常比exceptionex更快 例如,我的代码抛出NullPointerException try { ... } catch (NullPointerException e) { ... } 或 哪一个更快?我认为异常系统依赖于标志,所以特定类型由于控制较少而更快。但我想知道 如果答案是肯定的,说明原因?谢谢 不是:您假设代码没有崩溃。通常的警告适用于。。。确保你没有。为了清晰而不是速度而编程。如果程序太慢,请使用

我想知道像
NullPointerException
ex这样的特殊异常比
exception
ex更快

例如,我的代码抛出
NullPointerException

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

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

如果答案是肯定的,说明原因?谢谢


不是:您假设代码没有崩溃。

通常的警告适用于。。。确保你没有。为了清晰而不是速度而编程。如果程序太慢,请使用探查器查找问题

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

如果在try语句中抛出一个异常,该异常具有一个特定的异常处理程序,该异常处理程序将匹配该异常,那么异常表查找将比常规异常类快一点,因为它不会爬升类层次结构以查找匹配的祖先类。我的意思是,您应该保存少于10条CPU指令,抛出的异常应该非常罕见

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


中的函数findExceptionBlockInMethod显示了异常匹配代码的一个实现。

我们在这里讨论的是哪种语言/编译器?@Owen S.看起来像Java@dpb无论是写的还是写得不好的C++,只是想确定。犹大:当然了!
try {
   ...
} catch (Exception e) {
   ...
}