Java中的try-catch和loop异常

问题描述

| 在Java中,以下各项(在性能方面)有什么区别?
for (int i = 0; i < count; i++) {
    try {
        // code that throws Exception
    } catch (Exception e) {
        e.printStackTrace();
    }
}
try {
    for (int i = 0; i < count; i++) {
        // code that throws Exception
    }
} catch (Exception e) {
    e.printStackTrace();
}
    

解决方法

        您可以同时使用两者,但这都取决于您要执行的操作。如果要在循环完成一次后继续执行,则可以采用第一种方法。如果要捕获异常,则停止执行循环,然后执行第二个循环。在性能方面,这一切都取决于您要如何处理。     ,        在第一个版本中,如果遇到异常,则循环继续;在第二个版本中,循环在catch块之后继续。那是那些代码片段中最重要的区别。     ,        主要区别在于,在代码的第一段中,即使try块中引发了异常,并且捕获到该异常,for循环的执行仍继续。在第二个片段中,如果引发异常,则退出for循环。这是因为整个循环都在try块内。     ,        不,我很确定从这里的性能来看绝对没有区别(忽略有关循环的明显事实)。在这两种情况下,您都将在例外表中仅创建一个条目-只有PC值(即例外有效的范围)会有所不同。 也就是说,如果您假设以下是例外表,则唯一会更改的是x,y和z值。
Exception table:
   from to target type
     x y z <Class java.lang.Exception>
    ,        既然您问过这两个版本的代码的性能,我想起了“ Practical Java”(Addison-Wesley 2000),它在实践23中提出了建议:将try / catch块放在循环之外。原因是在关闭JIT编译器的情况下在JVM上运行代码。在这种情况下,缺少运行时JIT优化会导致操作码中出现额外的分支,从而导致性能降低。您可以在此处阅读2014年的JIT文档:http://www.oracle.com/technetwork/articles/java/architect-evans-pt1-2266278.html     ,        除了您在逻辑上的区别与持续的追求。两者之间没有明显区别
try {
lots of stuff which might not throw any exception
something that throws exception
} catch (Exception e) {
}
lots of stuff which might not throw any exception
try {
something that throws exception
} catch (Exception e) {
}
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...