我可以使用已经编写的 Jmh 微基准来预热生产代码吗
Can I use already written Jmh microbenchmarks to warm up production code
我有许多需要高性能的代码路径基准。我的 Jmh 微基准测试的预热迭代比我在生产中编写的预热代码更有效。我的问题是,我可以导出我的基准测试并通过 Java api 调用它们,以便在实际应用程序中预热代码路径吗?还是引擎盖下有一些魔法会使它无效。
我认为通过 API 使用 0 个分叉启动基准测试将 运行 启动 VM 中的基准测试。如果它们构成良好的热身,那么您可能会得到想要的效果。
我不建议你这样做。首先,并不是说您可以提供基准测试所需的所有基础设施。例如,不可能提供某些对象,例如 Blackhole
,因为这个 class 不能从基准之外实例化。其次,不能保证 VM 的预热结果如您所愿:实际代码可能表现出略有不同的行为,因此您进行基准测试而不是污染您的配置文件,而不是为 现实世界[准备 VM] =17=].
为了预热 VM,从外部提供类似于真实交互的交互几乎总是更好。将程序教给 self-warmup 对于代码更改来说非常脆弱,几乎不是一个好主意。
我有许多需要高性能的代码路径基准。我的 Jmh 微基准测试的预热迭代比我在生产中编写的预热代码更有效。我的问题是,我可以导出我的基准测试并通过 Java api 调用它们,以便在实际应用程序中预热代码路径吗?还是引擎盖下有一些魔法会使它无效。
我认为通过 API 使用 0 个分叉启动基准测试将 运行 启动 VM 中的基准测试。如果它们构成良好的热身,那么您可能会得到想要的效果。
我不建议你这样做。首先,并不是说您可以提供基准测试所需的所有基础设施。例如,不可能提供某些对象,例如 Blackhole
,因为这个 class 不能从基准之外实例化。其次,不能保证 VM 的预热结果如您所愿:实际代码可能表现出略有不同的行为,因此您进行基准测试而不是污染您的配置文件,而不是为 现实世界[准备 VM] =17=].
为了预热 VM,从外部提供类似于真实交互的交互几乎总是更好。将程序教给 self-warmup 对于代码更改来说非常脆弱,几乎不是一个好主意。