当前位置: 首页 > 知识库问答 >
问题:

JMH是根据CPU时间还是挂钟时间计算每个时间单位的操作数?

尉迟韬
2023-03-14

考虑到JMH的默认用法,我想确定JMH的测量基于哪种时间类型:CPU时间还是挂钟。

我试着调查JMH的官方样本(https://openjdk.java.net/projects/code-tools/jmh/),教程(在Jenkov、Baeldung、Mykong和其他网站),但未能准确地找到这些信息(我承认我可能错过了一些关于基准测试的文档或一般信息)。

例如,在样本35中(https://hg.openjdk.java.net/code-tools/jmh/file/99d7b73cf1e3/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_35_Profilers.java),我们以输出为例:

        Benchmark                              (type)  Mode  Cnt     Score    Error   Units

          JMHSample_35_Profilers.Maps.test     hashmap  avgt    5  1553.201 ±   6.199   ns/op

          JMHSample_35_Profilers.Maps.test     treemap  avgt    5  5177.065 ± 361.278   ns/op

因此,我想知道分数列是使用挂钟时间还是CPU时间计算的,这样我就可以准确地解释基准测试结果。

共有1个答案

姚乐家
2023-03-14

正如我所担心的那样,我错过了基本信息,并且把我的问题表述得很糟糕,因为挂钟和CPU时间不是唯一的选择。我遵循Alexandre Cartaganis的建议,查看了JMH的源代码。我发现生成基准的类Benchmark Generator依赖于System.nanoTime()。

此外,根据该系统。nanoTime()文档和Kevin Bourrillion对另一个问题的回答我得出结论,默认情况下,JMH根据一些任意但固定的源来测量时间(就像System.nanoTime()。

 类似资料:
  • 所以我想知道如何计算一段代码的时间复杂度(T(n)),例如,下面的代码,就操作的数量而言。 我相信这很简单,但是我的讲师没有很好地教这个概念,我真的很想知道如何计算时间复杂度! 提前谢谢!

  • 问题内容: 我需要计算两个日期之间经过的时间。 这里要注意的是,我需要像YouTube一样用视频评论时间戳来显示它。也就是说,仅以最大的方式显示它。 例如, 如果时间是50秒前,应该说是50秒前。 如果时间超过一分钟,则应说一分钟前/十分钟前,等等。 如果时差是1小时30分钟,则应显示:一个小时前。 如果时间是一个半星期而不是一个星期前应该说的话。 如果时间超过一个月,则应说一个月前/两个月前,等

  • 我正试图在RoR上创建一个计算时间的应用程序。 当您按下开始按钮时,它会拉Time.now,然后,当您按下停止时,它会再次拉Time.now,然后计算两者之间的时间量。然后它会通过to_i将给定的秒转换为整数,然后将整数秒计算为小时:分钟:秒 然而,我的代码出了点问题,它不停地抛出一个又一个错误。 当前顺序为 nil:NilClass 的“未定义方法 '-'”

  • 问题内容: 我在一个MySQL数据库表上工作,该表的列包含我对其他主机执行ping操作时的时间戳记(例如2014-09-16 09:08:05)。我的问题是如何在几分钟内计算出针对特定主机的第一次ping和最后一次ping之间的差异?另外,如何为上述差异的开始和结束指定不同的时间戳(而不是第一次和最后一次ping)。这是表格的示例: 我希望我已经对自己的解释足够清楚。 问题答案: 您可以使用本机的

  • 问题内容: 我有一个超过15000行的数据框对象,例如: 我试图找到具有特定anime_id的行。 我只是想知道此搜索是在固定时间(如字典)还是线性时间(如列表)中完成的。 问题答案: 这是一个非常有趣的问题! 我认为这取决于以下几个方面: 按索引访问单行( 索引已排序且唯一 )应具有运行时,其中 按索引访问单行( 索引不是唯一的并且未排序 )应该具有运行时 通过索引访问单行( 索引不是唯一的,并

  • 问题内容: 我试图找到最干净/最pythonic的方式来评估“ now”是否介于两次之间;然而; 例如,“开始/结束时间”可能会跨越一天的边界,也可能不会跨越一天的边界(仅使用简单的示例): 做一个简单的方案是行不通的! 我目前拥有的一些代码可以评估当前是否为“ NightTime”,如下所示: 我注意到,这些似乎并不能说明开始时间和结束时间跨越一天的边界。 除此之外; 关于添加基于日程安排的任何