gpt4 book ai didi

java - 缩小 catch block 的类型对性能有影响吗?

转载 作者:搜寻专家 更新时间:2023-11-01 03:37:32 24 4
gpt4 key购买 nike

变化的表现内涵是什么

try {
canThrowDifferentExceptions();
} catch (Exception e) {
// handle exception
}

try {
canThrowDifferentExceptions();
} catch (Exception1 | Exception2 | Exception3 e) {
// handle exception
}

我认为过于宽泛的 catch block 会产生隐藏未计划的异常的风险,但我很好奇 multi-catch 的性能特征。

最佳答案

唯一的区别是异常表,在多捕获的情况下只指向一条线,而在另一种情况下它指向正确的捕获线。

唯一的区别是非多捕获结束时的 goto

在单个 catch(Exception e) 的情况下,表异常仅包含一行要求扩大转换而不会引入任何开销。

总体而言,根据一次goto 的成本,您不应期望有任何性能差异


测试代码:

public static void main(final String[] args) {
int i = 0;
try {
if (i == 1) {
throw new NullPointerException();
} else if (i == 2) {
throw new ArrayIndexOutOfBoundsException();
} else {
throw new IllegalStateException();
}
} catch (NullPointerException | ArrayIndexOutOfBoundsException
| IllegalStateException e) {
}
}

与非 multi catch 的区别是:

32c32,36
< 37: return
---
> 37: goto 45
> 40: astore_2
> 41: goto 45
> 44: astore_2
> 45: return
// Exception table:
// from to target type
// 2 36 36 Class java/lang/NullPointerException
36,37c40,41
< 2 36 36 Class java/lang/ArrayIndexOutOfBoundsException
< 2 36 36 Class java/lang/IllegalStateException
---
> 2 36 40 Class java/lang/ArrayIndexOutOfBoundsException
> 2 36 44 Class java/lang/IllegalStateException

catch(Exception e) 对比:

//     Exception table:
// from to target type
< 2 36 36 Class java/lang/NullPointerException
< 2 36 36 Class java/lang/ArrayIndexOutOfBoundsException
< 2 36 36 Class java/lang/IllegalStateException
---
> 2 36 36 Class java/lang/Exception

关于java - 缩小 catch block 的类型对性能有影响吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26304420/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com