问题标签 [jmh]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3505 浏览

list - Java 8 流与迭代器性能

我正在比较使用和不使用流的两种过滤列表的方法。事实证明,对于 10,000 个项目的列表,不使用流的方法更快。我有兴趣了解为什么会这样。谁能解释一下结果?

使用 JMH 进行微基准测试:

java -jar 目标/benchmarks.jar -wi 5 -i 5 -f 1

基准
模式 Cnt 分数错误单位
PracticeQuestionsCh8Benchmark.benchmarkCountLongWordsUsingStreams thrpt 5 10.219 ± 0.408 ops/ms
PracticeQuestionsCh8Benchmark.benchmarkCountLongWordsWithoutUsingStreams thrpt 5 910.785 ± 21.215 ops/ms

编辑:(因为有人删除了作为答案发布的更新)

0 投票
1 回答
557 浏览

jmh - JMH:约束参数空间

假设我有一个带有两个参数的 JMH 测试:

是否有一种惯用的方法来添加对参数的约束,例如仅用于基准param1 < param2

从@SetUp 中抛出异常有效,但会给输出增加噪音。

0 投票
1 回答
111 浏览

java - JMH 给出繁忙的吞吐量值

我正在使用 JMH 运行一些基准测试,并且每次迭代都会得到繁忙的吞吐量值,有时会有 +/- 50% 的差异。(i7 4770K、Windows 7 x64、Java 1.8u31、JMH 0.9 - 无法升级)。由于装箱和拆箱整数以及大量使用同步块,基准测试会产生大量垃圾。将迭代运行时间从 1 秒增加到 5 秒会产生较小的方差。

我的问题是:

  • 我怎样才能发现这种差异的来源?
  • 为什么有时在预热期间我会获得显着更高的吞吐量值?
0 投票
1 回答
700 浏览

java - JMH Benchmarking - 比较替代实现的运行时间的简洁方法

我有同一个自定义类的两个实现:

并想比较它们每个函数的运行时间(它们都具有相同的名称)。目前,我的基准测试如下所示:

我为大约 25 个不同的函数重复了这种并行结构(由于两种实现,每个函数编写了两次)。有没有办法让我只编写 25 个 @Benchmark 函数并让 jmh 为这两个实现运行每个函数?

0 投票
2 回答
1215 浏览

java - 如何用 Java 衡量数据库的性能?

我正在寻找一种衡量 Java 中特定数据库性能并将它们相互比较的好方法。这些数据库是:(NoSQL)MongoDB、CouchDB 和 Cassandra 以及(RDBMS)MySQL、Postgresql。

我打算做一些 CRUD 测试和一些更复杂的连接/关系测试。我想过使用 JMH(Java Microbenchmarking Harness),但我不知道这是否是个好主意,因为它正在测量 ops/s(每秒操作数)。有人对用 Java 衡量这些数据库的性能有什么好的建议吗?还是使用 JMH 实际上是一个不错的选择?

0 投票
1 回答
1384 浏览

benchmarking - JMH [Java Micro-Benchmarking Harness] 中的绘图

我一直在阅读有关JMH的信息。但我找不到使用它生成图的方法。JMH 是否支持绘图?或者是否有为此目的的第三方库?

0 投票
2 回答
570 浏览

java - 在应用服务器中运行微基准测试 [JMH]

我阅读了有关JMH的信息并尝试了提供的示例。

我想要做的是测量以下场景的统计数据,

[1] 客户端订单 -> [2] 服务器 -> [3] 开始处理订单 -> [4] 成功处理订单并准备发送 -> [5] 客户端收到响应

我可以成功地完成 [1] 到 [5] 的场景。在那里,我使用 benchmark.jar 从 @Benchmark 注释方法调用我的客户

现在我坚持测量从 [2] 到 [4] 的统计数据,它代表服务器端处理。我应该通过注释服务器端方法来做到这一点吗?如果是这样,我如何以获取基准统计信息的方式调用这些方法?

文档说The recommended way to run a JMH benchmark is to use Maven to setup a standalone project that depends on the jar files of your application.这是否意味着我正在尝试的场景无法使用 JMH?

更新:有没有办法通过 rmi 调用来调用 @Benchmark 注释的方法?

0 投票
1 回答
7495 浏览

java - 在 JMH 中对具有不同值的循环进行微基准测试

众所周知,在 JMH 基准测试中使用循环不是一个好主意,因为它会被 JIT 编译器优化,因此应该避免。int有没有一种方法可以在不使用循环的情况下为我的 JMH 基准测试方法提供不同的输入值(输入列表)。

0 投票
3 回答
825 浏览

java - 是否可以使用 JMH 作为 Maven 验证检查?

我有一段性能关键的代码,我想将其作为 maven 构建步骤进行保护,即 JMH 将运行并检查性能是否随着本地更改而降低。

如何使用 JMH 检查这种退化?

我找到了一些相关链接:

我之前已经实现了自动化性能测试(尽管不是使用 Java,也不是在 CI 环境中)。需要注意的一个关键点是,您永远不要将其作为绝对值运行,因为运行基准测试的机器可能会有所不同。BogoMips 或依赖于测试的参考类型可用作相对比较。然后将基准测量为该参考时间的某个倍数,具有上限和下限。

虽然您通常会担心基准测试速度变慢(降级),但检查上限也很重要,因为它可能表示意外的加速(更好的硬件支持),这应该表明每个系统/架构的限制需要检查。

0 投票
1 回答
115 浏览

java - 提前编译是否需要在 jmh 中预热?

我正在阅读一些关于 java microbenchmark 工具的文档,我得到了这个肯定:

每个在线优化都需要预热,基础知识:预热 JIT 编译并不是唯一的在线优化。

这个预热阶段对于提前编译的 vm 是否仍然有用?