java - Web 应用程序是否将代码隐式包装在禁止 JVM 优化的 try-catch 块中?
问题描述
我们都知道 try-catch 块会抑制某些编译器优化,如下所述:
“将代码放在 try-catch 块中会抑制 JVM 实现以其他方式执行的某些优化。” 有效的 Java,第 69 条(约书亚·布洛赫)
那么,Web 应用程序呢?在 Web 应用程序中,特别是在控制器中,一切都 - 在某种程度上 - 包含在 try-catch 块中。我们知道,因为在发生未处理的异常时,我们的应用程序不会崩溃,而是返回服务器错误 500。我们是否可以说在 Web 控制器中运行的任何代码都被隐式检查异常,其后果是我们提到的(禁止优化)?
更新。我试图缩小问题的范围,顺便说一句,这纯粹是理论上的。最初的假设是:JVM 不能对 try-catch 块内的代码应用某些优化。所以:
缺乏这些优化是否也适用于方法调用?
或者换句话说:
JVM 可以优化从 try-catch 块调用的方法中的代码吗?或者 try-catch 块是否会阻止对任何代码段的优化 - 甚至方法调用堆栈跟踪 - 在其中执行?
解决方案
答案基本上是:是的,这些优化对于那些调用是不可能的,但是不,没关系。
每秒很少有网络请求。在调用上花费比没有 catch 块的调用多 1000% 的时间也没关系,因为该 try/catch 块每秒最多执行几千次。Try/catch 只会减慢通话速度,而不是通话中的通话,看到了吗?
推荐阅读
- javascript - 如何给Javascript回调一个参数
- java - 按列表对象字段的属性过滤列表
- python - Scipy interp1d 插值蒙版数组
- java - 弹簧执行器上的不同端口
- android - Dagger2,在依赖组件中为 ViewModelProvider.Factory 添加绑定
- php - 没有 xampp 的 PHP 开发
- mysql - 如何在 SQL 的一列上同时应用 REPLACE 和 UPPER
- jquery - jQuery一起执行加载和更改
- .net - InstanceContextMode.Single 是否可用于 WCF basicHttpBinding?
- zebra-printers - 尝试使用 SGD 代码更改 Zebra 打印机上的 IP 配置