问题标签 [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 投票
1 回答
2285 浏览

java - @Group 和 @GroupThreads 在 jmh 中指的是什么?

我一直在研究 jmh 实现“多线程”基准的方式。据我了解,注释@Group("Identifier")@GroupThreads(thread_number)启用并行运行同一组内的基准。

使用 CPU 监视器,我得到两个 CPU 已完全使用。我想知道跑步者如何解释这些注释。

0 投票
2 回答
584 浏览

java - 如果可以关闭 JIT,为什么还要使用 JMH?

我想知道如果我可以关闭 JIT,为什么还要使用 JMH 进行基准测试?JMH 是否没有抑制可以通过禁用 JIT 来防止的优化?

0 投票
1 回答
197 浏览

java - 使用参数化“jmh”测量对多线程算法进行错误基准测试

为了对多线程算法进行基准测试,我设置了参数化jmh测量。一段时间后,测量因错误而崩溃

该算法创建的线程数量非常有限,并且不会泄漏内存。因此,这个问题不同于在单个应用程序中遇到该错误的人提出的关于 SO 的许多其他问题。

问题显然源于jmh长时间执行的许多执行,显然,操作系统(Ubuntu 14.04,64 位)或 JVM 没有正确清理在先前执行中分配的本机线程。

基准测试是从一个脚本(在 Eclipse 中,不使用命令行)开始的,其中Options对象是通过以下方式构建的:

那么问题是:如何正确地对并发算法进行基准测试?是否应该以特定方式进行测量?jmh/JVM上设置的具体参数?我应该按照其他答案中的建议增加允许的本机线程数还是会影响结果?

由于不严格要求纳秒精度,因此我不一定需要 jmh,但我喜欢它的界面、精度和功能。另外,我怀疑这个问题与 OS/JVM 的关系比与jmh它本身更相关。

0 投票
1 回答
1516 浏览

java - 如何使用 perfasm/xperfasm/WinPerfAsmProfiler 运行 JMH

尝试在 Windows 上运行 JMH 基准测试WinPerfAsmProfiler会出现以下错误:

0 投票
2 回答
16609 浏览

java - 如何从 JUnit 测试中运行 JMH?

如何使用 JUnit 测试在现有项目中运行 JMH 基准测试?官方文档建议制作一个单独的项目,使用 Maven shade 插件,并在main方法中启动 JMH。这是必要的吗?为什么推荐它?

0 投票
1 回答
670 浏览

jmh - 基准测试结果 ForkJoin vs Disruptor?

我已经运行了这个由 编写的DisruptovsFJAleskey Shipilev Mirco-Benchmarks ,其中比较了 ForkJoin 和 Disruptor 库的性能。

我在 Linux 平台 i5 上使用 JDK1.8.40 的结果:

结果的第一部分slicesK < 50000是预期的,因为Disruptor它使用了 RingBuffer 和一种使其在并发上下文中更加高效的机制。

现在,当slicesK >= 50000测试Disruptor的性能不如 ForkJoinRecursiveDeep 和 ForkJoinReuse 时。有人可以向我解释这些结果吗?谢谢

0 投票
1 回答
512 浏览

java - System.Nanotime 粒度和延迟?

我正在看这个jmh测试http://hg.openjdk.java.net/code-tools/jmh/file/57623b7f64e6/jmh-core-benchmarks/src/main/java/org/openjdk/jmh/benchmarks/NanoTimerBench .java,对于System.nanotime(). 但我并不真正理解粒度和延迟测量之间的区别。测量延迟和测量粒度有什么区别?

0 投票
1 回答
4139 浏览

java - Java 8 流不可预测的性能下降,没有明显的原因

我正在使用 Java 8 流来迭代带有子列表的列表。外部列表大小在 100 到 1000 之间变化(不同的测试运行),内部列表大小始终为 5。

有 2 次基准运行显示出意外的性能偏差。

运行 1

运行 2

我有两个问题:

  1. 为什么两次测试运行的 loop+500 和 loop+600 之间存在一致且显着的性能差异?
  2. 为什么在 Run1 stream+400 和 Run2 stream+300 中存在显着但不一致的性能偏差?

看起来 JIT 有时会做出次优的优化决策,从而导致性能大幅下降。

测试机有 128GB RAM 和 32 个 CPU 核心:

PS 添加了没有流的基准测试。这些测试(循环 + 流 + pureLoop)让我认为使用流和 lambda 需要大量的微优化工作,并且无论如何不能保证一致的性能。

运行 3(纯循环)

解决方案:按照 apangin 的建议,禁用分层编译使 JIT 结果稳定。

0 投票
1 回答
1239 浏览

java - 在结果中显示 JMH StackProfiler 摘要

我正在尝试记录 JMH 基准测试的结果。基准测试很棒并且按预期工作。问题在于记录结果。无论我使用哪种 ResultFormatType,结果输出都会显示来自堆栈分析器的信息的 NaN。

我知道这可能是因为堆栈信息延迟到摘要。如何将此摘要数据添加到我尝试存储的结果中?

CSV 输出示例。

0 投票
1 回答
289 浏览

java - Hadoop YARN 上的 JMH 基准测试

我为我的 MapReduce 工作编写了一个 JMH 基准测试。如果我在本地模式下运行我的应用程序,它可以工作,但是当我在我的 hadoop 集群上使用 yarn 脚本运行它时,我会收到以下错误:

我的shell脚本如下:

我的基准选项是: