我想知道像 NullPointerException
ex 这样的特定异常比 Exception
ex 更快。
例如,我的代码抛出 NullPointerException
try {
...
} catch (NullPointerException e) {
...
}
或
try {
...
} catch (Exception e) {
...
}
哪个更快?我认为异常系统取决于标志,因此由于控制较少,特定类型的速度更快。但我想知道。
如果答案是肯定的,请说出原因?谢谢。
不是:您认为代码没有任何崩溃。
最佳答案
通常的警告适用...确保您不这样做 optimize prematurely 。编程是为了清晰而不是速度。如果程序太慢,请使用分析器来查找问题。
假设Java并且没有抛出异常,它们同样快。 athrow操作永远不会被调用,因此不会对异常表执行任何查找,也不需要进行异常类匹配。
如果您在 try 语句中抛出异常,并使用单个特定异常处理程序来匹配该异常,则异常表查找将比一般异常类稍微更快地匹配特定异常类,因为它不会沿着类层次结构向上查找匹配的祖先类。我的意思是,您应该节省少于 10 个 CPU 指令,并且抛出的异常应该非常罕见。
如果你抛出各种异常并且有多个catch block ,那么情况就太复杂了,无法说捕获单个共同祖先类的异常会更快还是更慢;这取决于细节。
Kaffe's exception.c 中的函数 findExceptionBlockInMethod显示了异常匹配代码的一种实现。
关于java - 特定类型异常捕获比一般类型异常捕获快吗?如果快的话比率是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3163955/