- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
谁能帮我解答这个问题。我用单一方法编写简单的基准测试
public void timeIntArrayBlockingQueue(int reps) {
for (int i = 0; i < reps; i++) {
for (int j = 0; j < length; j++)
queue.add(data[j]);
Integer value;
while ((value = queue.poll()) != 101) {}
}
}
对于ArrayBlockingQueue并得到结果:
0% Scenario{vm=java, trial=0, benchmark=IntArrayBlockingQueue, length=100} 5480.41 ns; σ=311.51 ns @ 10 trials
33% Scenario{vm=java, trial=0, benchmark=IntArrayBlockingQueue, length=1000} 56579.97 ns; σ=5530.23 ns @ 10 trials
67% Scenario{vm=java, trial=0, benchmark=IntArrayBlockingQueue, length=10000} 553782.25 ns; σ=27212.56 ns @ 10 trials
length us linear runtime
100 5.48 =
1000 56.58 ===
10000 553.78 ==============================
vm: java
trial: 0
benchmark: IntArrayBlockingQueue
这些数字 (5480.41ns 56579.97ns 553782.25ns) 的确切含义。
0% 场景方法 timeIntArrayBlockingQueue 被调用 10 次,参数长度 = 100。
(timeIntArrayBlockingQueue(100) - 10 次)
33% 场景方法 timeIntArrayBlockingQueue 被调用 10 次,参数长度 = 1000。 (timeIntArrayBlockingQueue(1000) - 10 次)..
如何解释这个基准测试的结果?
最佳答案
百分比只是进度,即之后没有什么有趣的。
What this digits (5480.41ns 56579.97ns 553782.25ns) mean exactly.
这是单次迭代的平均持续时间,即 timeXXX
的持续时间除以 rep
。
σ=311.51 ns
是 Standard deviation .某种绝对误差,如果 σ/measured_time
接近于 1,则可以确定有问题。
benchmark=IntArrayBlockingQueue, length=100
基准测试的名称是给定的参数,例如通过 @Param
。
不要让您的 timeXXX
方法不返回任何内容,而是计算并返回一些结果,这样您就可以确定没有优化整个计算。你方法的主体应该是这样的
...
while ((value = queue.poll()) != 101) {
result += value;
}
与 Integer.getValue()
一起进行的单个加法几乎不会使其变慢。它做了一点,但基准测试通过这种方式变得更加现实(你使用轮询值,不是吗)。通常您想要运行多个基准测试并比较它们的结果,以便您可以选择最快的变体(实际上,通常您不需要任何基准测试)。
你的循环很奇怪,反正队列中通常只有一个元素......
关于java - Caliper:解释基准测试结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12544426/
我正在测试两种方法的 6 种不同实现,这需要 time* 12 方法。使用接口(interface)和带有 Supplier 的 @Param 我只需要 2 个方法,但可能会有一些相关的开销,所以我编
刚刚了解了 Caliper,并浏览了文档 - 它看起来是一个很棒的工具(感谢 Kevin 和 Google 的团队将其开源)。 问题。为什么没有基于注释的机制来为常见用例定义基准?似乎是这样的: pu
我正在尝试对通过 slf4j 使用时两种不同 log4j 模式布局的性能进行基准测试。我正在使用 caliper(当前 HEAD 版本)。 这是我的基准类: public class PatternL
谁能帮我解答这个问题。我用单一方法编写简单的基准测试 public void timeIntArrayBlockingQueue(int reps) { for (int i = 0; i < r
我已经使用 Caliper 编写了一些基准测试.如何一次运行多个基准测试?我目前有许多扩展 SimpleBenchmark 的类,每个类都有一些 timeXXX 方法。是否可以同时运行所有这些? Si
对于 ELKI我需要(并且拥有)比标准 Java JDK 和 Collections API 提供的更灵活的排序实现。 (排序不是我的最终目标。我使用部分排序来批量加载索引结构,例如 k-d-tree
所以我了解了 Caliper 并尝试使用它。所以我写了以下内容来开始这个框架: public class HashTableBenchMark { HashMap
我最近发现了 Caliper benchmark framework for Java这似乎是一个非常有用的微基准测试工具。我使用它为我的 vector 数学库运行微基准测试 ( vectorz )
我使用 Google Caliper 对检查字符串中 mdn 编号的两种方法进行基准测试。一种方法使用用户定义的方法,而另一种方法使用正则表达式。我真的很惊讶地发现,平均而言,正则表达式方法比用户定义
好的,卡尺再次遇到一些问题。 我现在在 Linux 上运行,尝试使用 beta 快照。我正在尝试仅使用 jar 通过命令行运行 Google 的卡尺。 (测试版快照) 我无法访问这台机器上的maven
当我打开measureMemory参数时,我收到ConfigurationException(代理库失败)来自 Caliper 源的 Tutorial.java (http://code.google
我试图弄清楚如何使用 Caliper 在 Eclipse 中进行基准测试,但我一无所获。我尝试按照此处找到的 26 分钟教程进行操作:https://code.google.com/p/caliper
我下载了最新的 google caliper 源代码并使用 maven 构建它。现在我正在尝试运行给定 here. 的 google caliper 示例测试.我正在使用以下命令来执行测试。 java
我有一个基准测试需要多次运行来比较结果,因为它需要使用不同的编译器和编译参数进行编译。当我执行它时,运行会通过简单的指示符在线发送:A、B、C 等。 我想配置 Caliper,以便我可以为每次运行传递
我最近的任务是对我们 API 的一些功能进行基准测试,并且我一直在使用 Caliper 来执行此操作。它看起来相当简单,实际上非常强大,我一直在关注这里的教程: How to use caliper
我正在使用 Google Caliper(最新的主代码)对二维的四段代码进行基准测试。例如,以下基准测试方法: @Benchmark mechanismOneBreadth(...) @Benchma
在 Caliper ~0.5 中,基准运行伴随着每个基准运行的一些人类可读的控制台输出,例如: stringCount benchmark ns linear runti
有人要求我使用 Google 的 Caliper 项目创建一些微基准测试。我非常想使用最新的 beta 快照的注释功能,但除了一些小示异常(exception),我很难找到关于如何实际运行该东西的好文
我得到了一个如下所示的 Caliper 基准测试: public Course timeCourseCreation( int i ) { return createCourse( i ); }
这可能更像是 Gradle 问题而不是 Caliper 问题,但我对 Gradle 还是比较陌生。我有兴趣在我的构建中提供一个可以使用 Caliper 运行一些基准测试的任务。我已经将 Caliper
我是一名优秀的程序员,十分优秀!