代码之家  ›  专栏  ›  技术社区  ›  mafu

微基准需要运行多长时间?

  •  1
  • mafu  · 技术社区  · 15 年前

    首先,这不是关于微基准的有用性。我很清楚它们的目的:指出性能特征并在非常具体的情况下进行比较,以突出一个方面。这是否会对你的工作产生影响是另一回事。

    几年前,有人(我想是海因茨·卡布兹?)注意到每个值得花时间查看其结果的基准都必须运行至少几分钟,并且至少需要运行3次,而第一次运行总是被丢弃。这就解释了JVM的预热以及环境中的不一致(后台进程、网络流量等)和测量不准确。这对我来说很有意义,我的个人经历也提出了类似的建议,所以我总是采用这种策略。

    但是,我注意到很多人(例如 Jeff )编写只运行几毫秒的基准测试(!)只运行一次。我知道近几年来短跑基准的准确性有所提高,但我仍然觉得很奇怪。难道每个微基准都不应该运行至少一秒钟,并且至少运行3次以获得某种有用的输出吗?或者这条规则现在已经过时了?

    1 回复  |  直到 15 年前
        1
  •  0
  •   Paul R    15 年前

    根据我的经验,你需要:

    • 多次运行(并放弃第一个结果-vm和其他效果)
    • 最低限度 如果你在看计算密集型的代码
    • 运行足够长的时间以降低循环和定时功能的成本
    • 理想情况下在一个操作系统时间片内运行(通常为10毫秒) 对于多个时间片,例如运行~5 ms或~500 ms。

    我只倾向于使用计算密集型代码——如果您有不同的配置文件(例如内存密集型或大量I/O),那么时间策略可能需要不同。

    推荐文章