java - 特定类型异常捕获比一般类型异常捕获快吗?如果快的话比率是多少?

标签 java exception

我想知道像 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/

相关文章:

java - 在具有基于网格的背景的网格中排列组件

java - 如何构建我自己的应用程序设置

c# - 有没有办法为 WinForms .NET 3.5 应用程序中未处理的异常定义操作?

c++ - 是依靠GCC/LLVM的 `-fexceptions`技术上未定义的行为吗?

抛出异常后 Angular 2 不更新 View

c++ - 这是正确的行为吗?

java - @Transactional 不在独立应用程序中启动事务

java - 获取Android应用程序中所有已执行和当前正在运行的AsyncTasks

java - 有关 Spring MVC 在这两种情况下如何接收和使用 Accept Header 的一些信息

c++ - Solaris 上的异常处理机制