Java 中的 try catch 影响性能吗?
前几天在 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 catch 影响性能吗?的更多相关文章
- 【Java学习笔记之三十三】详解Java中try,catch,finally的用法及分析
这一篇我们将会介绍java中try,catch,finally的用法 以下先给出try,catch用法: try { //需要被检测的异常代码 } catch(Exception e) { //异常处 ...
- [转载]java中try 与catch的使用
留着以后看 原文地址:与catch的使用">java中try 与catch的使用作者:碌碌如玉 try{ //代码区 }catch(Exception e){ //异常处理 } 代码区 ...
- Java 中 try、catch、finally 语句块的执行顺序
假设代码顺序书写如下:try → catch → finally → 其他代码 则: 1.正常执行顺序:try → catch → finally → 其他代码 2.try,catch和finally ...
- java中try 与catch的使用
(2011-10-08 17:08:43) 转载▼ 标签: 杂谈 分类: Java try{//代码区}catch(Exception e){//异常处理}代码区如果有错误,就会返回所写异常的处理. ...
- 在java中的Try Catch块-------------异常处理(2)
1. Try块是什么? Try块是一块可能产生异常的代码块,一个Try块可能跟着Catch块或者Finally块,或者两者. Try块的语义: try{ //statements that may c ...
- 你真的理解Java中的try/catch/finally吗?
看几个例子,回顾一下执行顺序 例子1 无异常,finally中的return会导致提前返回 public static String test() { try { System.o ...
- Java 中的5个代码性能提升技巧,最高提升近10倍
文章持续更新,可以关注公众号程序猿阿朗或访问未读代码博客. 本文 Github.com/niumoo/JavaNotes 已经收录,欢迎Star. 这篇文章介绍几个 Java 开发中可以进行性能优化的 ...
- java中自动装箱带来的性能问题
之前没有特别注意自动封装所带来的性能问题,今天看了effective java,实验了一下,结果大吃一惊: 考虑下面这段代码: public static void main(String args[ ...
- Java中ArrayList和LinkedList的性能分析
ArrayList和LinkedList是Java集合框架中经常使用的类.如果你只知道从基本性能比较ArrayList和LinkedList,那么请仔细阅读这篇文章. ArrayList应该在需要更多 ...
随机推荐
- Sysstat的工具集sar、 iostat、mpstat、sadf、sar、sadc
sysstat Sysstat的工具集sar. iostat.mpstat.sadf.sar.sadc * iostat 工具提供CPU使用率及硬盘吞吐效率的数据: * mpstat 工具提供单个处理 ...
- 转:Web 开发中很实用的10个效果【附源码下载】
原文地址:http://www.cnblogs.com/lhb25/p/10-useful-web-effect.html 在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多 ...
- scp 利用 ssh 协议 复制文件
有时候,我们使用 scp 命令可以解决我们很多问题: NAME scp — secure copy (remote file copy program) 使用举例:拷贝当前文件,到 系统 10.66. ...
- jQuery插件实例五:手风琴效果[动画效果可配置版]
昨天写了个jQuery插件实例四:手风琴效果[无动画版]那个是没有动画效果的,且可配置性不高,本篇为有动画效果.对于一些数据做了动态的计算,以实现自适应. 欢迎大家入群相互交流,学习,新群初建,欢迎各 ...
- Use MusicBrainz in iOS(三)查询专辑的完整信息
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u010962810/article/details/24066737 本文讨论下通过专辑名获取专辑的 ...
- 利用存储过程来重命名SQL Server数据库
最近遇到一个需要在多用户模式下重新命名数据库的Case, 因为数据库可能被其他用户使用,所以直接修改可能会失败.对于此种情况,我们可以等所有用户结束使用数据库时修改,或者是将数据库切换到单用户模式下进 ...
- 理解javascript观察者模式(订阅者与发布者)
什么是观察者模式? 观察者模式又叫做发布订阅模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生改变时就会通知所有观察着对象.它是由两类对象组成,主题和观察者 ...
- JS图片Switchable切换大集合
JS图片切换大集合 利用周末2天把JS图片切换常见效果封装了下,比如:轮播,显示隐藏,淡入淡出等.废话不多说,直接看效果吧!JSFiddler链接如下: 想看JS轮播切换效果请点击我! 当然由于上传图 ...
- Python2.7-operator
operator 模块,没有什么特殊的,简单说就是把常用的数学计算符号(+,-,*,**,/,<<,>>等)逻辑运算(or,and,xor,is,is_not)等以函数形式表示 ...
- python+jenkins 构建节点环境编译器配置问题
python 编译器默认添加环境变量路径