为什么例外对性能有害?

Aeq*_*tas 5 java performance exception

看到这个问题,每个人都谈论"性能"会如何受到影响,或者当性能成为问题时应该避免例外,等等.

但是我没有看到一个很好的解释,为什么抛出异常对性能不利,这个问题中的每个人似乎都认为这是理所当然的.

我问这个的原因是,我正在尝试优化一个应用程序,并注意到在某些操作上抛出并吞下了几百个异常,例如单击按钮来加载新页面.

chr*_*ke- 5

首先,当然,它只是糟糕的设计,因为"异常"具有语义含义("某些情况阻止了这种方法履行其合同"),并且这是以一种令人惊讶的方式滥用该特征.

对于Java,创建异常对象(特别是填充堆栈跟踪)非常昂贵,因为它涉及遍历堆栈,大量对象分配和字符串操作等等.实际上抛出异常并不是主要的性能损失.

  • 不是这样.你在谈论什么对象分配和字符串操作?`StackTraceElement是在`getStackTrace()`调用时懒得创建的,而不是抛出或捕获异常.此外,热隐式异常(如NullPointerException,ClassCastException,ArrayIndexOutOfBoundsException等)甚至不需要堆栈遍历 - 它们与`goto`一样快. (3认同)