try catch会影响性能么

作者: 光源_Android | 来源:发表于2016-03-28 21:09 被阅读2577次

前言

今天 code review 时发现某个同事的代码中存在滥用try catch的现象。其实这种行为我们也许都经历过,刚参加工作想尽量避免出现崩溃问题,因此不可避免得想在所有可能抛出异常的地方都try catch一下。

当然,这种行为肯定是不可取的。如果这样,那还不如所有逻辑都包在大大的try catch里好了。代码的是否具有高健壮性必然是代码是否高效优雅决定的。

当然,这个也引起我的思考,try catch会影响性能么?

结论

try catch不会影响性能。——严格意义上说是微乎其微。

这个结论的确很难让人接受,最起码与我的预估不大一样。

按照我的想法,当代码中出现的各种特性越多,轻量点的如enum,重一点的如“反射”,必然会增加更多的开销。

然而,从结果看,在没有抛出异常时,try catch的影响跟添加了一个 if else是同一个量级的。也就是说,我们完全可以忽视try catch耗费的那点性能。

网上已经有很多人总结了结论,我也就不重复造轮子了。此结论经过多方验证,应该无误,如有不同意见,请留言评论:

1、异常如果没发生,也就不会去查表,也就是说你写不写try catch 也就是有没有这 个异常表的问题,如果没有发生异常,写try catch对性能是木有消耗的,所以不会让程序跑得更慢。

2、try 的范围大小其实就是异常表中两个值(开始地址和结束地址)的差异而已,也是不会影响性能的。

推荐阅读

偷懒是程序员的美德。我也就不重复造轮子了。
Java上的try catch并不影响性能

相关文章

网友评论

  • linkerqin:怎么会不影响呢?
    快帮助你的同事修改一下代码吧。
    虽然不能因为性能问题不使用异常处理,但是滥用、误用是肯定不行的。
    捕获的范围不能过大,不能把异常处理用来处理正常逻辑,不能捕获异常不处理。
    而且,一旦异常发生,创建异常对象、收集栈信息很耗时。
    并且,异常处理的逻辑还和虚拟机有关,有的虚拟机处理的性能就不错。
    楼主改一下吧,你的文章搜索曝光还挺多,不要误人子弟。
    可以看一下这两个链接:
    1. https://stackoverflow.com/questions/299068/how-slow-are-java-exceptions
    2. http://blog.sina.com.cn/s/blog_8727584801011qm1.html
    光源_Android:@stevenQ 兄弟,你可能没有认真看我的文章内容,光看了题目。我在文中一开始就说了,靠 try catch 去“降低”程序 crash 去不可取的,肯定让同事改了代码啊。然后基于这点,再去探究“无脑” try catch 对程序的影响,的确是微乎其微 —— 既然是无脑 try catch,目的是为了以防万一,而不是正常使用,也就是 catch 住 exception 的概率很小。
  • CharTen:亲测,在requestAnimationFrame里面,在try{}catch(e){}里面使用context.getImageData貌似会导致内存泄漏。。。
    光源_Android:@CharTen 纳尼,这个我还是第一次知道
  • 0156f92dc0a8:try catch 内存影响很大的
    光源_Android:@macRong 咦,怎么说,能展开说说么?

本文标题:try catch会影响性能么

本文链接:https://www.haomeiwen.com/subject/xonjlttx.html