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

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

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

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

我需要使用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不会真正优化任何东西,因为代码不会改变。 但是,仍然,我更喜欢寻求一些exerimented建议:)

谢谢您的帮助 !

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

  • http://www.ibm.com/developerworks/library/j-jtp12214/
  • http://www.ibm.com/developerworks/java/library/j-benchmark1/index.html
  • http://www.ibm.com/developerworks/java/library/j-benchmark2/

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

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