问题标签 [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 回答
783 浏览

java - JMH:不考虑内部方法时间

我有:这样的方法:

问题:我不希望我的程序考虑generateRandomArray方法花费的时间。

Questuin: 如何generateRandomArray从 jmh 测量中排除?

0 投票
1 回答
10919 浏览

java - JMH:无效的初始堆大小

我用 JMH 测试我的程序性能。并且无法配置堆大小。我想知道为什么它不起作用。

问题:

  1. 为什么 JMH 不接受堆大小配置?
  2. JMH 是否在没有jvmArgs方法的情况下吸收想法堆大小设置?

错误:

主要方法:

想法.vmoptions

主要方法选项:

0 投票
4 回答
8996 浏览

java - JMH 不能在 Eclipse 中工作(作为 Maven 项目) - 没有要运行的基准

我想开始看看 JMH,但由于某些原因,我无法运行基准测试。让我解释一下我的尝试:

  1. 在 Eclipse 中设置一个 Maven 项目
  2. 定义 pom.xml 如下: 在此处输入图像描述

  3. 下载了一些官方的 JMH 示例。作为示例,我选择了一个非常简单且不错的起点: http ://hg.openjdk.java.net/code-tools/jmh/file/0c58dc4fcf17/jmh-samples/src/main/java/org/openjdk /jmh/samples/JMHSample_01_HelloWorld.java

  4. 鼠标右键单击 > 运行方式 > Java 应用程序

然而,这会产生输出:

我用谷歌搜索过,上面的例子似乎应该可以工作,但对我来说不是这样。我也试图通过阅读来解决这个问题,但这似乎对我不起作用:

似乎 JMH 应该在 /META-INF/MicroBenchmarks 中生成一些有效的行——这意味着在这个文件夹中不应该生成 java 类文件,对吗?

谁能帮我找出错误?谢谢你。

0 投票
1 回答
1825 浏览

java - JMH 中 hs_gc 分析器计数器的含义

我将 JMH 基准测试工具与 hs_gc 热点分析器一起使用。

我遇到的问题是我不确定输出计数器值的含义,并且无法在网上找到参考。

谁能指出我的规范方向或解释这些值?

我在下面粘贴了一个示例输出:

0 投票
2 回答
1773 浏览

java - 在 oracle jdk 8 中进行基准测试以进行性能测试

通常,当我想测试性能时,我在运行代码之前和之后使用 System.nanoTime() 函数,然后我正在做一个减法。最近我注意到人们正在使用

它是openjdk中JMH的一部分。

我们正在使用 Oracle jdk。我想知道是否有类似的工具,或者是否有另一种方法来构建、运行和分析 nano/micro/milli/macro 基准测试,而不是编写 System.nanoTime。

0 投票
2 回答
210 浏览

java - 是否可以使用微基准框架仅对某些语句计时?

我计划对我的 java 代码进行微基准测试,其中涉及对本地和远程数据库的多次调用。我正要使用 System.nanoTime() 但开始阅读有关 jmh 和 caliper 等微基准测试框架的信息。绝对推荐使用这些框架,但是从我读到的任何内容(很少)看来,我们只能对一个完整的方法进行基准测试,而且它还允许我们以非侵入性的方式进行此操作(wrt 现有代码),即我们不需要乱扔现有代码使用 jmh/caliper 的代码/注释。

我只想对某些方法中的特定代码(语句)进行基准测试。是否可以使用任何微基准测试框架来做到这一点?请对此提供一些见解。

0 投票
4 回答
1312 浏览

java - java是否缓存方法的结果

我使用JMH 来指定操作的复杂性。如果您从未与 JMH 合作过,请不要担心。JMH 将estimateOperation多次启动该方法,然后获取平均时间。

问题:[窄]这个程序Math.cbrt(Integer.MAX_VALUE)每次都会计算吗?还是只计算一次然后返回缓存结果?

问题:[广泛]: JVM 是否曾经缓存过方法的结果?

0 投票
1 回答
1855 浏览

java - JMH - 在没有 Maven 的情况下运行

我正在尝试设置非常基本的 JMH 测试套件,但我无法通过测试生成 jar...我在类路径上有注释处理器,也有 jmh 核心,一个简单的类,但是当我运行时Main.main()没有 jar正在生成(从 IntelliJ 运行它)。运行时是否缺少某些参数/选项?

0 投票
1 回答
3045 浏览

java - 基准测试 Java HashMap Get(JMH 与循环)

我的最终目标是使用标准 Java 集合作为基准,为几个 Java 原始集合库创建一套全面的基准测试。过去我使用循环的方法来编写这些微基准。我将我正在基准测试的函数放在一个循环中并迭代 100 万次以上,这样 jit 就有机会预热。我取循环的总时间,然后除以迭代次数,以估计对我进行基准测试的函数的单次调用所花费的时间。在最近阅读了JMH项目,特别是这个例子之后:JMHSample_11_Loops我看到了这种方法的问题。

我的机器:

这是上述循环方法代码的精简示例:

这是我使用 JMH 重写此基准的尝试:

结果如下:

据我所知,JMH 中的相同基准测试的 hashmap 为31纳秒,而循环测试为552纳秒。31 纳秒对我来说似乎有点太快了。查看每个程序员都应该知道的延迟数主内存引用大约是 100 纳秒。L2 缓存引用大约是 7 纳秒,但是具有 1000 万个 Long 键和值的 HashMap 远远超过了 L2。JMH 结果对我来说也很奇怪。90% 的 get 调用需要 0.0 纳秒?

我假设这是用户错误。任何帮助/指针将不胜感激。谢谢。

更新

这是AverageTime运行的结果。这更符合我的预期。谢谢@oleg-estekhin!在下面的评论中,我提到我之前做过AverageTime测试,结果与SampleTime. 我相信在运行时我使用了条目少得多的 HashMap,并且更快的查找确实是有意义的。

0 投票
1 回答
670 浏览

java - JMH 微基准测试递归快速排序

您好,我正在尝试对各种排序算法进行微基准测试,但 jmh 和基准测试快速排序遇到了一个奇怪的问题。也许我的实现有问题。如果有人可以帮助我看看问题出在哪里,我会很感兴趣。首先,我使用带有 jdk 7 和 jmh 0.9.1 的 ubuntu 14.04。这是我尝试进行基准测试的方法:

还有其他算法,但我将它们排除在外,因为它们或多或少都可以。现在由于某种原因快速排序非常慢。时间慢了好几倍!甚至更多——我需要分配更多的堆栈空间让它在没有 StackOverflowException 的情况下运行。看起来由于某种原因快速排序只是做了很多递归调用。有趣的是,当我在主类中简单地运行算法时 - 它运行良好(具有相同的随机分布和 100000 个元素)。无需增加堆栈,简单的 nanotime 基准测试显示的时间非常接近其他算法。在基准测试中,当使用 jmh 进行测试时,JDK 排序非常快,并且与其他具有天真的纳米时间基准测试的算法一致。我在这里做错了什么还是错过了什么?这是我的快速排序算法:

现在我明白了,由于我的枢轴选择,如果我在已经排序的数据上运行它,我的算法会非常慢(O(n^2))。但是我仍然在随机数据上运行它,即使我尝试在我的主要方法中对排序数据运行它时,它也比在随机数据上使用 jmh 的版本快得多。我很确定我在这里遗漏了一些东西。您可以在此处找到具有其他算法的完整项目:https ://github.com/ignl/SortingAlgos/