问题标签 [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.
java - JMH:不考虑内部方法时间
我有:这样的方法:
问题:我不希望我的程序考虑generateRandomArray
方法花费的时间。
Questuin: 如何generateRandomArray
从 jmh 测量中排除?
java - JMH:无效的初始堆大小
我用 JMH 测试我的程序性能。并且无法配置堆大小。我想知道为什么它不起作用。
问题:
- 为什么 JMH 不接受堆大小配置?
- JMH 是否在没有
jvmArgs
方法的情况下吸收想法堆大小设置?
错误:
主要方法:
想法.vmoptions
主要方法选项:
java - JMH 不能在 Eclipse 中工作(作为 Maven 项目) - 没有要运行的基准
我想开始看看 JMH,但由于某些原因,我无法运行基准测试。让我解释一下我的尝试:
- 在 Eclipse 中设置一个 Maven 项目
定义 pom.xml 如下:
下载了一些官方的 JMH 示例。作为示例,我选择了一个非常简单且不错的起点: http ://hg.openjdk.java.net/code-tools/jmh/file/0c58dc4fcf17/jmh-samples/src/main/java/org/openjdk /jmh/samples/JMHSample_01_HelloWorld.java
- 鼠标右键单击 > 运行方式 > Java 应用程序
然而,这会产生输出:
我用谷歌搜索过,上面的例子似乎应该可以工作,但对我来说不是这样。我也试图通过阅读来解决这个问题,但这似乎对我不起作用:
- 在 Eclipse 中从 main 运行 JMH 时出现“没有匹配的基准”
我试图将生成的类手动移动到 /META-INF/MicroBenchmarks 但这会产生以下错误:
/li>
似乎 JMH 应该在 /META-INF/MicroBenchmarks 中生成一些有效的行——这意味着在这个文件夹中不应该生成 java 类文件,对吗?
谁能帮我找出错误?谢谢你。
java - JMH 中 hs_gc 分析器计数器的含义
我将 JMH 基准测试工具与 hs_gc 热点分析器一起使用。
我遇到的问题是我不确定输出计数器值的含义,并且无法在网上找到参考。
谁能指出我的规范方向或解释这些值?
我在下面粘贴了一个示例输出:
java - 在 oracle jdk 8 中进行基准测试以进行性能测试
通常,当我想测试性能时,我在运行代码之前和之后使用 System.nanoTime() 函数,然后我正在做一个减法。最近我注意到人们正在使用
它是openjdk中JMH的一部分。
我们正在使用 Oracle jdk。我想知道是否有类似的工具,或者是否有另一种方法来构建、运行和分析 nano/micro/milli/macro 基准测试,而不是编写 System.nanoTime。
java - 是否可以使用微基准框架仅对某些语句计时?
我计划对我的 java 代码进行微基准测试,其中涉及对本地和远程数据库的多次调用。我正要使用 System.nanoTime() 但开始阅读有关 jmh 和 caliper 等微基准测试框架的信息。绝对推荐使用这些框架,但是从我读到的任何内容(很少)看来,我们只能对一个完整的方法进行基准测试,而且它还允许我们以非侵入性的方式进行此操作(wrt 现有代码),即我们不需要乱扔现有代码使用 jmh/caliper 的代码/注释。
我只想对某些方法中的特定代码(语句)进行基准测试。是否可以使用任何微基准测试框架来做到这一点?请对此提供一些见解。
java - java是否缓存方法的结果
我使用JMH 来指定操作的复杂性。如果您从未与 JMH 合作过,请不要担心。JMH 将estimateOperation
多次启动该方法,然后获取平均时间。
问题:[窄]这个程序Math.cbrt(Integer.MAX_VALUE)
每次都会计算吗?还是只计算一次然后返回缓存结果?
问题:[广泛]: JVM 是否曾经缓存过方法的结果?
java - JMH - 在没有 Maven 的情况下运行
我正在尝试设置非常基本的 JMH 测试套件,但我无法通过测试生成 jar...我在类路径上有注释处理器,也有 jmh 核心,一个简单的类,但是当我运行时Main.main()
没有 jar正在生成(从 IntelliJ 运行它)。运行时是否缺少某些参数/选项?
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,并且更快的查找确实是有意义的。
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/