首先,这不是关于微基准的有用性。我很清楚它们的目的:指出性能特征并在非常具体的情况下进行比较,以突出一个方面。这是否会对你的工作产生影响是另一回事。
几年前,有人(我想是海因茨·卡布兹?)注意到每个值得花时间查看其结果的基准都必须运行至少几分钟,并且至少需要运行3次,而第一次运行总是被丢弃。这就解释了JVM的预热以及环境中的不一致(后台进程、网络流量等)和测量不准确。这对我来说很有意义,我的个人经历也提出了类似的建议,所以我总是采用这种策略。
但是,我注意到很多人(例如 Jeff )编写只运行几毫秒的基准测试(!)只运行一次。我知道近几年来短跑基准的准确性有所提高,但我仍然觉得很奇怪。难道每个微基准都不应该运行至少一秒钟,并且至少运行3次以获得某种有用的输出吗?或者这条规则现在已经过时了?
根据我的经验,你需要:
我只倾向于使用计算密集型代码——如果您有不同的配置文件(例如内存密集型或大量I/O),那么时间策略可能需要不同。