我目前正在开发一个 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/
这就是为什么我会说只需要一次热身。:)