try-catch块的位置会影响性能吗?
示例1:在 while循环
中的try-catch块while (true) {
try {
// ... read from a file
} catch (EOFException e) {
break;
}
}
示例2:try-catch块环绕 while循环
try {
while (true) {
// ... read from a file
}
} catch (EOFException e) {
// :P
}
从逻辑上讲,这两个例子是等价的,但我更喜欢哪个?
答案 0 :(得分:3)
Should java try blocks be scoped as tightly as possible?
这给出了比我更好的答案。除此之外,它们只是在抛出异常时检查的表上添加一个条目,因此除非抛出异常,否则它们不会影响性能。如果可以的话,最好把它放在尽量恢复的地方。如果没有,只要有用或有意义。 虽然在循环之外休息,但我不认为第二个是有效的。
答案 1 :(得分:1)
任何开销try-catch
都可以忽略不计,但是第一种情况引起我注意的更多是它具有误导性:你捕获异常,只是为了中止循环。我选择解决方案2只是因为它与意图一致。而且你可以避免任何开销。
答案 2 :(得分:0)
您的try-catch的放置对您的应用程序的性能没有任何影响。即使它确实如此,也完全可以忽略不计,这不是你想要引导你的能量的地方。首先根据需要实施,然后进行优化。不要微观优化。
答案 3 :(得分:-1)
我的直觉告诉我,循环外的try / catch更好。如果通过编写try / catch对字节码产生影响,则创建较少的内容会更好。如果除非发生异常,否则没有影响,那么无关紧要。我没有看到任何情况下让try / catch更好。
我可能错了......
答案 4 :(得分:-1)
第二个例子(try-catch块围绕代码)更快更清晰。