我目前正在开发一个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不会真正优化任何东西,因为代码不会改变。但是,我仍然倾向于寻求一些精心设计的建议:)
感谢您的帮助!
注意:我读了很多关于基准测试的内容:
这就是为什么我会说只需要一次预热。 :)
答案 0 :(得分:2)
需要一次热身。如果您介绍了这些文章并进行了适当的预热(足够的迭代次数,确保您的预热代码没有被淘汰等),那么您的预热就足够了,并且在每次测试之前,您将无法获得运行它的任何额外好处。