异常有多贵?

15 浏览
0 Comments

异常有多贵?

这个问题已经在此处有答案:

Java中异常对性能有何影响?

你知道java中抛出和处理异常的代价吗?

我们团队曾多次讨论异常的实际代价。有些人尽可能避免使用它们,有些人认为使用异常损失的性能被夸大了。

今天我在我们的软件中发现了以下代码:

private void doSomething()
{
    try
    {
      doSomethingElse();
    }
    catch(DidNotWorkException e)
    {
       log("A Message");
    }
    goOn();
}
private void doSomethingElse()
{
   if(isSoAndSo())
   {
      throw new DidNotWorkException();
   }
   goOnAgain();
}

与以下代码相比,这个的性能如何:

private void doSomething()
{
    doSomethingElse();
    goOn();
}
private void doSomethingElse()
{
   if(isSoAndSo())
   {
      log("A Message");
      return;
   }
   goOnAgain();
}

我不想讨论代码审美或其他任何事情,只是关于运行时行为!你有真实的经验/测量吗?

admin 更改状态以发布 2023年5月24日
0
0 Comments

抛出异常最慢的部分是填写堆栈跟踪信息。

如果事先创建并重复使用异常,JIT可能会将其优化为“机器级别的跳转”。

尽管如此,在你的问题代码不在一个非常紧密的循环中的情况下,差异将是可以忽略的。

0
0 Comments

异常并不是免费的...所以他们是昂贵的:-)

书籍Effective Java很详细地介绍了这一点。

  • 第39条:只为异常情况使用异常。
  • 第40条:为可恢复的情况使用异常。

作者发现,在他的机器上使用特定的VM和OS组合进行测试的情况下,异常导致代码运行速度慢了70倍。

0