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++代码中异常的效率)

目录
相关文章
|
13天前
|
XML 存储 JSON
Java程序部署
Java程序部署
|
24天前
|
Java 编译器 数据库连接
Java——异常
在 Java 中,程序执行过程中的不正常行为被称为异常。异常分为 Error 和 Exception。Error 表示系统级错误,而 Exception 则封装程序可能出现的问题。异常包括编译时异常和运行时异常(如数组越界)。异常可用于查找 bug 信息和作为方法内部的特殊返回值。处理异常的方式有默认处理和捕获异常,后者通过 try-catch 结构实现。此外,还可以自定义异常类来更灵活地处理特定情况。
28 9
Java——异常
|
1天前
|
Java
Java异常捕捉处理和错误处理
Java异常捕捉处理和错误处理
7 1
|
27天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
14天前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
24 5
|
14天前
|
Java 编译器 索引
|
15天前
|
IDE Java 开发工具
java自定义异常20
java自定义异常20
17 3
|
15天前
|
IDE Java 开发工具
java捕获异常19
java捕获异常19
15 2
|
15天前
|
Java 编译器 数据库连接
探索Java中的异常处理:提升程序的鲁棒性
【9月更文挑战第25天】在Java的世界里,异常是那些不请自来、令人头疼的“客人”。它们悄无声息地潜入我们的代码,一旦出现,便可能导致程序崩溃或行为异常。但是,如果能够妥善管理这些异常,我们就能将潜在的灾难转变为增强程序鲁棒性和用户体验的机会。本文将通过深入浅出的方式,带领读者理解Java异常处理的重要性,并提供实用的策略来优雅地处理这些意外情况。让我们一起学习如何在Java中捕捉、处理和预防异常,确保我们的程序即使在面对不可预见的错误时也能保持稳健运行。
|
21天前
|
监控 Java 数据库
Java程序如何进行不停机更新?
Java程序如何进行不停机更新?
24 1