Gee*_*eek 5 java try-catch effective-java
从Effective Java中的Exceptions章节:
将代码放在try-catch块中会禁止现有JVM实现可能执行的某些优化
try-catch块为什么以及如何阻止JVM优化?
JVM可能不会将try/catch块内的操作与try/catch块之外的操作组合或重新排序.每一层复杂性都会使优化更加困难.如果它是一个相对罕见的情况,它可能不会由JVM处理,如果有疑问,将选择正确而不是最佳代码.
“为什么”的原因之一是异常和异常处理被假定为异常;即很少执行的代码。由此可见,JIT 编译器花在优化异常处理程序上的时间对整体性能几乎没有什么好处。
JIT 编译器的优化器必须平衡有效优化的性能优势与优化成本。后者包括:
还可能存在阻碍异常处理程序优化的技术原因。例如,优化器可能不容易(甚至不可能)弄清楚控制流“来自”哪里。因此,基于了解的优化(例如在寄存器中缓存内容、提升公共子表达式……)无法执行。