前几天在 code review 时发现有一段代码中存在滥用try catch的现象。其实这种行为我们也许都经历过,刚参加工作想尽量避免出现崩溃问题,因此在很多地方都想着 try catch一下。

但实际上这种习惯不仅会让代码很难看,更会影响代码的运行性能。有些人会觉得,不就是一个 try catch 么,怎么会影响性能啊。那就让我们来测试看看吧。

实验

首先,我们看看没有try-catch情况下,进行100万次加法的耗时:

long start = System.nanoTime();

int a = 0;

for (int i = 0; i < 1000000; i++) {

a++;

}

System.out.println(System.nanoTime() - start);

经过5次统计,其平均耗时为:1816048纳秒,即1.8毫秒。

接着,我们来看看在有try-catch情况下,进行100万次加法的耗时:

long start = System.nanoTime();

int a = 0;

for (int i = 0; i < 1000000; i++) {

try {

a++;

} catch (Exception e) {

e.printStackTrace();

}

}

System.out.println(System.nanoTime() - start);

经过5次统计,其平均耗时为:1928394纳秒,即1.9毫秒。

我们再来看看,如果try-catch抛出异常,进行100万次加法的耗时:

long start = System.nanoTime();

int a = 0;

for (int i = 0; i < 1000000; i++) {

try {

a++;

throw new Exception();

} catch (Exception e) {

e.printStackTrace();

}

}

System.out.println(System.nanoTime() - start);

经过5次统计,其平均耗时为:780950471纳秒,即780毫秒。

经过上面三次统计,我们可以看到在没有try catch时,耗时1.8毫秒。在有try catch 但是没有抛出异常,耗时1.9毫秒。在有抛出异常,耗时780毫秒。我们能得出一个结论:如果try catch没有抛出异常,那么其对性能几乎没有影响。但如果抛出异常,那对程序将造成几百倍的性能影响。

结论

虽然在没有抛出异常时,try catch几乎没有性能影响。但是一旦抛出异常,那么其对性能的影响将是巨大的。因此我们在实际编程的时候,需要特别注意try catch语句的使用,不在没有必要的地方过多使用。

java try 性能损耗_Java 中的 try catch 影响性能吗?相关推荐

  1. union all会影响性能吗_Java 中的 try catch 影响性能吗?

    作者:陈树义来源:https://www.cnblogs.com/chanshuyi/p/is_try_catch_ineffective.html 前几天在 code review 时发现有一段代码 ...

  2. java try的用法_Java中try、catch的使用方法

    Java中有两种处理异常的方式,分别是用throws抛出异常.用try.catch捕获异常. try-catch 在Java try-catch语句的语法格式: try{ //代码块 }catch(E ...

  3. hashset java 键值对_Java中的各个容器的性能对比

    java中个个容器的属性,性能,参数对比: Java容器的性能及属性的对比 List:Vector,ArrayList,LinkedList Vector:内部是数组数据结构,可以理解为加锁的Arra ...

  4. java 队列已满_JAVA中常见的阻塞队列详解

    在之前的线程池的介绍中我们看到了很多阻塞队列,这篇文章我们主要来说说阻塞队列的事. 阻塞队列也就是 BlockingQueue ,这个类是一个接 口,同时继承了 Queue 接口,这两个接口都是在JD ...

  5. java list《》_Java中List集合的遍历

    一.对List的遍历有三种方式 List    list    =    new    ArrayList(); list.add("testone"); list.add(&qu ...

  6. java单例代码_java中的单例模式的代码怎么写

    单例模式在我们日常的项目中十分常见,当我们在项目中需要一个这样的一个对象,这个对象在内存中只能有一个实例,这时我们就需要用到单例. 一般说来,单例模式通常有以下几种: 1.饥汉式单例 public c ...

  7. java堆 数据结构 堆_Java中的紧凑堆外结构/组合

    java堆 数据结构 堆 在上一篇文章中,我详细介绍了代码对主内存的访问方式的含义. 从那时起,我就在Java中可以做什么以实现更可预测的内存布局提出了很多疑问. 有些模式可以使用数组支持的结构来应用 ...

  8. java stringbuffer长度限制_Java中的String、StringBuffer和StringBuilder

    作为作为一个已经入了门的java程序猿,肯定对Java中的String.StringBuffer和StringBuilder都略有耳闻了,尤其是String 肯定是经常用的.但肯定你有一点很好奇,为什 ...

  9. java多线程 线程安全_Java中的线程安全

    java多线程 线程安全 Thread Safety in Java is a very important topic. Java provides multi-threaded environme ...

最新文章

  1. vscode折叠/展开所有区域代码快捷键
  2. LeetCode 43字符串相乘44通配符匹配
  3. [python爬虫] 爬取图片无法打开或已损坏的简单探讨
  4. django 返回ajax html,Django 前台通过json 取出后台数据
  5. jQuery 的选择器 元素选择器
  6. 资源下载| 机器学习经典书籍《统计学习方法》(Python3.6)代码实现(及课件)
  7. 如何建立一个利于SEO的网站
  8. c语言怎么求一个数的所有因数,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...
  9. 「leetcode」142.环形链表II,如何求环?如何找入口?各个细节讲的明明白白!你疑惑的地方,这里都有!
  10. Web前端开发所用的调试工具
  11. 安卓 删除事件弹出消息框_微信更新,朋友圈可以删除好友评论了?网友:杠精终于可以删了...
  12. iOS动画——流光文字
  13. js 设计模式(23种)
  14. 静态网站以及动态网站
  15. 一杯清茶nbsp;几许相思
  16. BZOJ3838 : [Pa2013]Raper
  17. oracle延时盲注如何防止,【原创】WEB安全第四章SQL注入篇21 oracle 延时注入
  18. 如何在数据分析工作中找准自己的角色和定位?
  19. 逆变器运用到的c语言算法,详解六种逆变电源的控制算法
  20. 企业宣传片可以通过哪些途径进行宣传

热门文章

  1. Spring 通知和顾问进行增强
  2. Shiro学习笔记四(Shiro集成WEB)
  3. c语言伪常量const理解
  4. 实验:添加AXI IP到设计
  5. PHP图形图像的典型应用 --常用图像的应用(统计图)
  6. Qt之Ubuntu18.04安装(一)
  7. Android 系统开发系列三
  8. Android 如何抓取开机Log
  9. UITextField 文字垂直居中
  10. 开机时出现:reboot and select proper boot 、关于IDE与AHCI