加载中...

去优化(Deoptimization)是 JIT 编译运行时的回退机制:当优化代码所依赖的投机假设(如「此调用点只见过某一种类型」「该类没有子类覆盖此方法」)被运行时事实推翻时,虚拟机把执行从优化机器码安全地切换回解释器或低层编译代码。
优化代码在关键点内嵌假设检查(guard)或依赖注册(如类层次分析的失效通知);触发时,运行时依据编译器记录的映射信息,把机器寄存器与栈中的状态重建为解释器帧(栈上替换的逆过程,OSR exit),再继续解释执行,必要时丢弃已失效的编译代码重新收集剖析。
正因存在可靠的回退,JIT 才敢做「多数情况成立」的激进优化——虚调用去虚化与内联、类型特化、未初始化分支剪裁。去优化的存在把优化正确性问题转化为假设管理问题。
HotSpot、V8、JavaScriptCore、.NET 的分层编译均深度依赖该机制;频繁去优化(deopt loop)也是这类运行时典型的性能病症。

登录 后参与讨论
暂无讨论,来发表第一条评论吧