You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mockito测试中未抽方法的代码为何也获JIT优化?实验求证

你的猜测完全正确!

首先得给你点个赞,这个实验设计和后续的猜测都很到位。你观察到的现象核心原因就是JVM的JIT(即时编译器)确实在针对你调用的mvc.perform()及其内部依赖的方法进行优化,和你有没有把代码抽成自定义方法关系不大。

咱们拆解一下背后的逻辑:

  • JIT的优化核心是识别热点方法——也就是被频繁调用的方法。当一个方法被调用达到一定次数(HotSpot虚拟机默认是10000次左右,可配置),JIT就会把它从解释执行的字节码编译成机器码,后续调用就能直接执行机器码,速度大幅提升。
  • 在你的testFileA里,虽然每个测试方法都重复写了mvc.perform(...)这段代码,但本质上每次都是在调用MockMvc类的perform方法、MockMvcRequestBuilders.post方法,还有andDo、andExpect这些链式调用里的方法。第一次运行test1时,这些方法都是第一次被调用,处于解释执行状态,所以耗时较长;而到了test2、test3,这些方法已经被调用了多次,达到了JIT的热点阈值,被编译成了机器码,所以后续调用速度就快了。
  • 你抽出来的abstractedCode()方法,其实只是把这些调用打包了一层,但JIT真正关注的是底层被调用的那些框架方法,所以testFileB的表现和testFileA一致——都是首次触发解释执行,后续享受JIT优化的红利。

补充个小细节:即使你在同一个测试方法里重复执行mvc.perform()多次,也会看到第一次慢、后面越来越快的现象,这也是因为JIT会在运行过程中持续优化热点代码。

内容的提问来源于stack exchange,提问作者Will

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 20:42:46