异常有多贵?
异常有多贵?
这个问题已经在此处有答案:
你知道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日
异常并不是免费的...所以他们是昂贵的:-)
书籍Effective Java很详细地介绍了这一点。
- 第39条:只为异常情况使用异常。
- 第40条:为可恢复的情况使用异常。
作者发现,在他的机器上使用特定的VM和OS组合进行测试的情况下,异常导致代码运行速度慢了70倍。