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

发表于:2012-5-15 09:32

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:hengyunabc    来源:51Testing软件测试网采编

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

  其实从异常实现的角度来看,在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.     }  
  20.       
  21.     long func1(long i) throws Exception{  
  22.         if(i == 0){  
  23.             throw new Exception("abc");  
  24.         }  
  25.         return i-1;  
  26.     }  
  27.       
  28.     long func2(long i){  
  29.         if(i == 0){  
  30.             return i + 1;  
  31.         }  
  32.         return i -1;  
  33.     }  
  34.       
  35.     void test1(){  
  36.         Date begin = new Date();  
  37.         long total = 0;  
  38.         for(long i = 1; i < size; ++i){  
  39.             try {  
  40.                 total += func1(i);  
  41.             } catch (Exception e) {  
  42.                 e.printStackTrace();  
  43.             }  
  44.         }  
  45.         Date end = new Date();  
  46.         System.out.println(total);  
  47.         System.out.println("test1 time:" + (end.getTime() - begin.getTime()));  
  48.           
  49.     }  
  50.       
  51.     void test2(){  
  52.         Date begin = new Date();  
  53.         long total = 0;  
  54.         for(long i = 1; i < size; ++i){  
  55.             total += func2(i);  
  56.         }  
  57.         Date end = new Date();  
  58.         System.out.println(total);  
  59.         System.out.println("test2 time:" + (end.getTime() - begin.getTime()));  
  60.     }  
  61. }

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

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

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号