HotSpot C2 的 if 转换代价模型:分支概率与 CMov 的取舍
高吞吐服务里热点分支被 C2 编译成条件传送(CMov)后反而变慢,问题常出在分支概率与代价模型上。文章解释 C2 如何用分支概率决定是否把 if 转成 CMov、CMov 为什么在概率极不平衡时付出额外代价,并给出用 -XX:+PrintIdeal 与反汇编判断分支是否适合 CMov 的方法。
共 2 篇文章
高吞吐服务里热点分支被 C2 编译成条件传送(CMov)后反而变慢,问题常出在分支概率与代价模型上。文章解释 C2 如何用分支概率决定是否把 if 转成 CMov、CMov 为什么在概率极不平衡时付出额外代价,并给出用 -XX:+PrintIdeal 与反汇编判断分支是否适合 CMov 的方法。
高吞吐服务中,热点分支是保留分支指令还是转换为条件传送(CMov)直接决定性能。本文基于 HotSpot C2 编译器的实际实现,剖析 CMov 的收益与代价、C2 如何利用分支概率决定转换,以及 -XX:UseCMov 等参数的影响,帮助读者判断何时该信任 CMov 的优化。