基准测试:同一过程多次,只有一次预热?

时间:2013-02-12 08:49:25

标签: java concurrency benchmarking

我目前正在开发一个Java应用程序(Benchmark),它目的是为了确定某些与数据库相关的进程。

我的应用程序应运行如下:

我想要多次运行多个Usecases(简单插入,简单更新等,在数据库中)。运行之间的唯一区别是同时运行的线程数。

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

我的问题:

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

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

OR

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

基本上,无论线程数多少,“process()”方法都完全相同。我倾向于认为一个显然是足够的,因为JVM不会真正优化任何东西,因为代码不会改变。但是,我仍然倾向于寻求一些精心设计的建议:)

感谢您的帮助!

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

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

1 个答案:

答案 0 :(得分:2)

需要一次热身。如果您介绍了这些文章并进行了适当的预热(足够的迭代次数,确保您的预热代码没有被淘汰等),那么您的预热就足够了,并且在每次测试之前,您将无法获得运行它的任何额外好处。