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

简介:

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

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

目录
相关文章
|
1天前
|
SQL 网络协议 Java
Java异常详解
Java异常详解
7 1
|
5天前
|
存储 网络协议 Java
本地MinIO存储服务通过Java程序结合cpolar实现远程连接上传文件
本地MinIO存储服务通过Java程序结合cpolar实现远程连接上传文件
|
8天前
|
存储 Java 开发工具
【Java探索之旅】用面向对象的思维构建程序世界
【Java探索之旅】用面向对象的思维构建程序世界
9 0
|
8天前
|
小程序 Java 程序员
【Java探索之旅】我与Java的初相识(二):程序结构与运行关系和JDK,JRE,JVM的关系
【Java探索之旅】我与Java的初相识(二):程序结构与运行关系和JDK,JRE,JVM的关系
25 0
|
8天前
|
数据采集 存储 前端开发
Nutch库入门指南:利用Java编写采集程序,快速抓取北京车展重点车型
2024年北京车展凸显电动车全球热度,中国引领市场,展出117台全球首发车,包括30台跨国公司电动车。借助Nutch库抓取汽车网站数据,分析电动车市场趋势。通过配置代理和多线程爬虫,高效收集新车信息,助力理解市场动态,推动可持续交通发展。
Nutch库入门指南:利用Java编写采集程序,快速抓取北京车展重点车型
|
8天前
|
Oracle Java 关系型数据库
Java历史简述及程序运行机制简述
Java起源于1991年Sun公司James Gosling领导的Green项目,最初命名为Oak,后因爪哇岛咖啡更名为Java。1995年正式发布,2009年Sun被Oracle收购。Java程序运行包括:开发源代码、编译成字节码、JVM翻译为平台兼容的机器码执行。
|
10天前
|
Java 程序员 编译器
|
12天前
Swagger2异常:java.lang.NumberFormatException: For input string: ““
Swagger2异常:java.lang.NumberFormatException: For input string: ““
18 1
|
13天前
|
存储 Java 程序员
JavaSE&Java的异常
JavaSE&Java的异常
24 0
|
13天前
|
Java
网页运行java程序cheerpj
网页运行java程序cheerpj
35 0