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

其实从异常实现的角度来看,在throw语句处,跳转到异常的处理代码,不同的异常处理,应该类似C++中的虚函数表一样的数构结构(待考证)。详细请看下文

 

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

其实从异常实现的角度来看,在throw语句处,跳转到异常的处理代码,不同的异常处理,应该类似C++中的虚函数表一样的数构结构(待考证)。

所以如果没有抛出异常,那和普通的代码完全一样。至于在抛出异常时要处理的开销和不使用异常,用返回码等来判断不同的错误,不仅代码复杂,而且也一样要有处理的开销。

测试代码:

  1. import java.util.Date;
  2. public class Test {
  3.     long size = 1000000000L;
  4.     public static void main(String[] args) {
  5.         Test t = new Test();
  6.         t.test1();
  7.         t.test1();
  8.         t.test1();
  9.         t.test2();
  10.         t.test2();
  11.         t.test2();
  12.         t.test1();
  13.         t.test1();
  14.         t.test1();
  15.         t.test2();
  16.         t.test2();
  17.         t.test2();
  18.     }
  19.     long func1(long i) throws Exception{
  20.         if(i == 0){
  21.             throw new Exception("abc");
  22.         }
  23.         return i-1;
  24.     }
  25.     long func2(long i){
  26.         if(i == 0){
  27.             return i + 1;
  28.         }
  29.         return i -1;
  30.     }
  31.     void test1(){
  32.         Date begin = new Date();
  33.         long total = 0;
  34.         for(long i = 1; i < size; ++i){
  35.             try {
  36.                 total += func1(i);
  37.             } catch (Exception e) {
  38.                 e.printStackTrace();
  39.             }
  40.         }
  41.         Date end = new Date();
  42.         System.out.println(total);
  43.         System.out.println("test1 time:" + (end.getTime() - begin.getTime()));
  44.     }
  45.     void test2(){
  46.         Date begin = new Date();
  47.         long total = 0;
  48.         for(long i = 1; i < size; ++i){
  49.             total += func2(i);
  50.         }
  51.         Date end = new Date();
  52.         System.out.println(total);
  53.         System.out.println("test2 time:" + (end.getTime() - begin.getTime()));
  54.     }
  55. }

总结:异常是个很有用的功能,在不抛出异常时,开销可以忽略不计。

在C++中也是如此。(TODO:测试C++代码中异常的效率)

原文链接:http://blog.csdn.net/hengyunabc/article/details/7563448


» 本文链接:https://blog.java-zone.org/archives/756.html
» 转载请注明来源:Java地带  » 《Java中的异常对程序效率有无影响》

» 本文章为Java地带整理创作,欢迎转载!转载请注明本文地址,谢谢!
» 部分内容收集整理自网络,如有侵权请联系我删除!

» 订阅本站:https://blog.java-zone.org/feed/

标签: Java程序异常影响, Java程序性能影响

添加新评论