我有许多代码路径的基准测试需要高性能。我的Jmh微基准测试的热身迭代比我在生产中编写的热身代码更有效。我的问题是,我可以导出我的基准测试并通过Java API调用它们,以便在真实的实时应用程序中预热代码路径。或者说引擎盖下有一些魔法会使这种效果无效。
答案 0 :(得分:1)
我不建议你这样做。首先,没有给出您可以提供基准测试所需的所有基础结构。例如,不可能提供某些对象,例如Blackhole
,因为此类无法从基准外部实例化。其次,无法保证虚拟机的预热结果如你所愿:真正的代码可能会显示略微不同的行为,因此您的基准测试会污染您的配置文件,而不是为现实世界准备VM
为了预热VM,从外部提供类似于真实交互的交互几乎总是更好。将程序教学为自我预热对代码更改非常脆弱,几乎从不是一个好主意。
答案 1 :(得分:0)
我认为通过带有0个分支的API启动基准测试将在启动VM中运行基准测试。如果他们构成良好的热身,那么你可能会得到你想要的效果。