4

我目前正在开发一个 Java 应用程序(基准测试),其目的是测量与数据库相关的一些进程。

我的应用程序应该运行具有以下内容:

我有几个我想多次运行的用例(数据库中的简单插入、简单更新等)。运行之间的唯一区别是同时运行的线程数。

我需要使用 1、2、4、8、16 等线程来处理这些用例,以便在我的测试中包含并发性(使用 ExecutorService)。

我的问题 :

我的应用程序是否需要在每次运行之前运行预热?或者只有一个就足够了。换句话说,我的应用程序是否必须执行以下操作:

--warmup
--process(1) (1 thread)
--warmup
--process(2) (2 threads)
etc.

或者

--warmup
--process(1)
--process(2)
etc.

基本上,“process()”方法是完全一样的,与线程数无关。我倾向于相信一个显然就足够了,因为 JVM 不会真正优化任何东西,因为代码不会改变。但是,我仍然更喜欢寻求一些经验丰富的建议:)

感谢您的帮助 !

注意:我阅读了很多关于基准测试的内容:

这就是为什么我会说只需要一次热身。:)

4

1 回答 1

2

需要一次热身。如果您涵盖了这些文章并进行了适当的预热(足够的迭代,确保您的预热代码不会被消除等),那么您的预热就足够了,并且您不会在每次测试之前运行它获得任何额外的好处。

于 2013-02-12T08:52:40.847 回答