Java中的异常对程序效率有无影响

来源:互联网 发布:算法设计与分析考试题 编辑:程序博客网 时间:2024/06/04 21:51

当异常没有发生时,没有影响。

其实从异常实现的角度来看,在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++代码中异常的效率)