您的位置:首页 > 编程语言 > Java开发

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

2012-05-14 01:52 369 查看
当异常没有发生时,没有影响。

其实从异常实现的角度来看,在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++代码中异常的效率)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: