在异常实际被抛出和捕获时,异常处理在Java中会对性能产生一定的影响。
看一个例子:
public class ExceptionPerformanceTest { public static void main(String[] args) { int iterations = 1000000; // 测试不使用异常处理的性能 long startTime = System.nanoTime(); for (int i = 0; i < iterations; i++) { // 正常逻辑,没有异常处理 int result = i + 1; } long endTime = System.nanoTime(); long durationWithoutException = endTime - startTime; // 测试使用异常处理的性能 startTime = System.nanoTime(); for (int i = 0; i < iterations; i++) { try { // 正常逻辑,没有实际抛出异常 int result = i + 1; } catch (Exception e) { // 异常处理逻辑 } } endTime = System.nanoTime(); long durationWithExceptionHandling = endTime - startTime; // 测试实际抛出异常的性能 startTime = System.nanoTime(); for (int i = 0; i < iterations; i++) { try { if (i == iterations / 2) { throw new Exception("Test exception"); } int result = i + 1; } catch (Exception e) { // 异常处理逻辑 } } endTime = System.nanoTime(); long durationWithExceptionThrown = endTime - startTime; System.out.println("Time without exception handling: " + durationWithoutException + " ns"); System.out.println("Time with exception handling: " + durationWithExceptionHandling + " ns"); System.out.println("Time with exception thrown: " + durationWithExceptionThrown + " ns"); } }
运行结果:
测试不使用异常处理性能: 2698900 ns 测试使用异常处理的性能: 1897200 ns 测试实际抛出异常的性能: 6623300 ns
从运行结果可以看到,没有异常处理和仅仅添加try-catch块对性能的影响非常小。
当实际抛出异常时,性能开销显著增加,这是因为创建异常对象、和堆栈展开等操作的开销较大。
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

后台回复【架构】即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》