我目前正在开发一个 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 不会真正优化任何东西,因为代码不会改变。但是,我还是更愿意寻求一些经验丰富的建议:)

感谢您的帮助 !

注意:我阅读了很多关于基准测试的内容:
  • 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/

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

    最佳答案

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

    关于java - : Same process multiple times, 的基准测试只有一次热身?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14828681/

    10-10 08:54