Java中的异常对程序效率有无影响
2012-05-14 01:52
369 查看
当异常没有发生时,没有影响。
其实从异常实现的角度来看,在throw语句处,跳转到异常的处理代码,不同的异常处理,应该类似C++中的虚函数表一样的数构结构(待考证)。
所以如果没有抛出异常,那和普通的代码完全一样。至于在抛出异常时要处理的开销和不使用异常,用返回码等来判断不同的错误,不仅代码复杂,而且也一样要有处理的开销。
测试代码:
总结:异常是个很有用的功能,在不抛出异常时,开销可以忽略不计。
在C++中也是如此。(TODO:测试C++代码中异常的效率)
其实从异常实现的角度来看,在throw语句处,跳转到异常的处理代码,不同的异常处理,应该类似C++中的虚函数表一样的数构结构(待考证)。
所以如果没有抛出异常,那和普通的代码完全一样。至于在抛出异常时要处理的开销和不使用异常,用返回码等来判断不同的错误,不仅代码复杂,而且也一样要有处理的开销。
测试代码:
import java.util.Date; public class Test { long size = 1000000000L; public static void main(String[] args) { Test t = new Test(); t.test1(); t.test1(); t.test1(); t.test2(); t.test2(); t.test2(); t.test1(); t.test1(); t.test1(); t.test2(); t.test2(); t.test2(); } long func1(long i) throws Exception{ if(i == 0){ throw new Exception("abc"); } return i-1; } long func2(long i){ if(i == 0){ return i + 1; } return i -1; } void test1(){ Date begin = new Date(); long total = 0; for(long i = 1; i < size; ++i){ try { total += func1(i); } catch (Exception e) { e.printStackTrace(); } } Date end = new Date(); System.out.println(total); System.out.println("test1 time:" + (end.getTime() - begin.getTime())); } void test2(){ Date begin = new Date(); long total = 0; for(long i = 1; i < size; ++i){ total += func2(i); } Date end = new Date(); System.out.println(total); System.out.println("test2 time:" + (end.getTime() - begin.getTime())); } }
总结:异常是个很有用的功能,在不抛出异常时,开销可以忽略不计。
在C++中也是如此。(TODO:测试C++代码中异常的效率)
相关文章推荐
- PHP中的异常处理对程序执行效率的影响
- Java程序发生异常就挂了吗?
- java程序实现Linux下的服务的启停、注册、异常
- 多线程程序处理子线程异常 javaExceptionHandler机制
- Java程序中异常的相关知识
- java 程序 Exception starting filter struts2异常解决
- 程序循环顺序对效率的影响
- JAVA 异常对于性能的影响
- 使用Java程序从数据库中查询大量的数据时出现异常:java.lang.OutOfMemoryError: Java heap space
- crontab 运行java程序的异常——crontab配置环境变量
- 学习测试:Java堆栈变量、类变量、实例变量在程序中的执行效率
- 安装Rational Rose 2007并破解后,开启Rose 报出异常"java.lang.ClassNotFoundException" 但是并不影响使用!
- 用递归算法写一段程序实现 1+2+...+1000000 、java.lang.StackOverflowError 异常,原因,bug调查,处理
- C#/Java 程序执行MySqL 中文条件查询语句查询异常
- Java程序异常处理的特殊情况2
- spark程序异常:Exception in thread "main" java.io.IOException: No FileSystem for scheme: hdfs
- JAVA程序中抛出与声明异常
- HSQLDB: java程序使用hsqldb 入门教程 java启动hsqldb (初步hsqldb效率评估)
- 通过软件程序消除单片机由外界干扰产生的异常复位的影响(基于STM8S105单片机)
- java 程序中try catch / throw / 函数名上throws 具体执行顺序和扔异常捕获异常的概念模型