Java try-catch块的放置是否会影响性能?
try-catch块的放置是否会影响性能 示例1:在while循环中尝试catch块Java try-catch块的放置是否会影响性能?,java,performance,try-catch,Java,Performance,Try Catch,try-catch块的放置是否会影响性能 示例1:在while循环中尝试catch块 while (true) { try { // ... read from a file } catch (EOFException e) { break; } } try { while (true) { // ... read from a file } } catch (EOFException e) {
while (true) {
try {
// ... read from a file
} catch (EOFException e) {
break;
}
}
try {
while (true) {
// ... read from a file
}
} catch (EOFException e) {
// :P
}
示例2:环绕while循环的try catch块
while (true) {
try {
// ... read from a file
} catch (EOFException e) {
break;
}
}
try {
while (true) {
// ... read from a file
}
} catch (EOFException e) {
// :P
}
从逻辑上讲,这两个示例是等效的,但我应该选择哪一个?try-catch产生的任何开销可能都可以忽略不计,但第一种情况更吸引我注意的是它具有误导性:您捕获异常,只是为了中止循环。我会选择解决方案2,因为它与目的一致。这样可以避免任何开销。你能从外面休息一下吗?我不认为你的假设,即2是等价的是真的 我的直觉告诉我,圈外的尝试/捕捉更好。如果写try/catch会对字节码产生影响,那么创建的代码越少越好。如果没有影响,除非发生异常,那么它就无关紧要了。我看不出在任何情况下,把try/catch放在里面会更好 我可能错了… 这比我能给出的答案要好得多。简而言之,它们只在抛出异常时检查的表中添加一个条目,因此除非抛出异常,否则不会影响性能。如果可以的话,最好把它放在任何能让它恢复的地方。如果没有,无论哪里有用或有意义。
尽管循环外有break,但我认为第二个示例无论如何都是无效的。第二个示例(围绕代码的try-catch块)更快更清晰。try-catch的放置对应用程序的性能没有任何影响。即使是这样,它也将是完全可以忽略的,这不是你想要引导你的能量的地方。首先根据需要实施,然后优化。不要进行微优化。这两个代码示例并不相等。是的,在第二种情况下,您当然不希望
中断代码>要么你的程序无法编译,要么你将跳出错误的循环。正如其他人所指出的,代码示例并不等效。如果你不在一个循环中,你就不能真正从中刹车。不管怎样,是什么阻止了您对其进行基准测试?这是一个相当简单的代码基准测试。@krock:
我一直在等待有人这么说;在高层,它在我的代码中是等效的。稍后我将发布一个完整的代码示例,但希望您能理解这个问题。@all:
第二次中断是复制/粘贴的错误。第二次中断是复制/粘贴的错误。第二次中断是复制/粘贴的错误。我没有说这方面的任何内容。我知道这是一个错误,并忽略了它,因为你已经清楚地说明了你的意图。第二次中断是复制/粘贴的错误。