异常处理影响性能吗?

在异常实际被抛出和捕获时,异常处理在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面试题总结

评论交流
    说说你的看法