HotSpot C2 条件传送生成条件:分支概率与 CMov 的代价权衡
高吞吐服务中,热点分支是保留分支指令还是转换为条件传送(CMov)直接决定性能。本文基于 HotSpot C2 编译器的实际实现,剖析 CMov 的收益与代价、C2 如何利用分支概率决定转换,以及 -XX:UseCMov 等参数的影响,帮助读者判断何时该信任 CMov 的优化。
共 3 篇文章
高吞吐服务中,热点分支是保留分支指令还是转换为条件传送(CMov)直接决定性能。本文基于 HotSpot C2 编译器的实际实现,剖析 CMov 的收益与代价、C2 如何利用分支概率决定转换,以及 -XX:UseCMov 等参数的影响,帮助读者判断何时该信任 CMov 的优化。
长时间运行的应用中,代码缓存膨胀可能导致 JIT 编译被禁用,性能急剧下降。本文从 nmethod 的生命周期出发,解释 HotSpot 清扫机制的触发条件、分段代码缓存如何缓解碎片化,以及如何通过 -XX:ReservedCodeCacheSize 和 -XX:+UseCodeCacheFlushing 等参数进行监控与调整。
本文解读 JDK 10 引入的线程局部握手机制,说明它如何在不触发全局安全点的前提下对单个线程执行 JIT 去优化、偏向锁撤销等操作,并通过与全局安全点的对比和诊断参数帮助读者理解其适用场景与局限。