Java 我可以使用已经编写好的Jmh微基准来预热生产代码吗

Java 我可以使用已经编写好的Jmh微基准来预热生产代码吗,java,jmh,Java,Jmh,对于需要高性能的代码路径,我有许多基准测试。我的Jmh微基准测试的预热迭代比我在生产中编写的预热代码要有效得多。我的问题是,我是否可以导出我的基准测试并通过JavaAPI调用它们,以便在真实的实时应用程序中预热代码路径。或者是引擎盖下有什么魔法会使它失效 我认为通过带有0个分叉的API启动基准测试将在启动VM中运行基准测试。如果它们构成了良好的热身,那么你可能会得到你想要的效果。我不建议你这样做。首先,您不能提供基准测试所需的所有基础设施。例如,不可能提供某些对象,例如Blackhole,因为此

对于需要高性能的代码路径,我有许多基准测试。我的Jmh微基准测试的预热迭代比我在生产中编写的预热代码要有效得多。我的问题是,我是否可以导出我的基准测试并通过JavaAPI调用它们,以便在真实的实时应用程序中预热代码路径。或者是引擎盖下有什么魔法会使它失效

我认为通过带有0个分叉的API启动基准测试将在启动VM中运行基准测试。如果它们构成了良好的热身,那么你可能会得到你想要的效果。

我不建议你这样做。首先,您不能提供基准测试所需的所有基础设施。例如,不可能提供某些对象,例如
Blackhole
,因为此类不能从基准之外实例化。其次,无法保证虚拟机的预热结果会如您所愿:实际代码可能会显示出稍有不同的行为,这样您的基准测试会污染您的配置文件,而不是让虚拟机为真实世界做好准备

为了使虚拟机热身,从外部提供类似于真实交互的交互几乎总是更好的。教程序进行自我预热对于代码更改来说非常脆弱,而且几乎从来都不是一个好主意