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

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

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

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

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

测试代码:

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

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

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

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

【编辑推荐】

  1. 实现JavaScript编写类的方式
  2. Java简单的网络爬虫实现
  3. Java调用SQL Server的存储过程详解
责任编辑:林师授 来源: hengyunabc的博客
相关推荐

2010-02-22 09:51:19

惠普思科

2009-07-16 09:12:55

必应谷歌微软

2009-06-12 18:54:46

异常程序开发

2022-05-12 15:33:03

iOS苹果个性化广告

2012-05-07 08:18:42

程序日志性能

2015-06-19 12:17:49

JAVA性能影响

2010-04-09 10:16:05

富士康员工死亡事件

2013-04-26 10:14:20

交互设计

2021-11-04 08:58:29

贪心算法策略

2015-11-04 14:03:44

BYOD自带设备企业

2013-09-29 09:49:04

编程生活方式

2011-06-01 17:45:22

SEO

2021-01-27 10:31:35

隐私谷歌Chrome

2024-05-11 14:49:39

Java EEJakarta影响

2011-04-15 10:38:31

程序员

2012-10-31 11:16:04

程序员招聘

2021-10-13 22:38:42

数字货币货币人类

2022-12-15 08:00:38

JavaScript错误性能

2011-05-24 16:01:51

OpenFlow影响

2023-09-05 15:48:00

点赞
收藏

51CTO技术栈公众号