jmh 基准测试_JMH:如何设置和运行JMH基准

jmh 基准测试

健康警告!

这篇文章描述了如何设置和运行简单的JMH基准测试。 众所周知,微基准测试很难正确设置,即使您确实正确设置了(通过使用JMH之类的工具),它们仍然会产生误导。 仅仅因为您的代码在极端孤立的人为情况下以某种方式运行,并不意味着它将在您的生产代码内以相同的方式运行。 仅举几个例子,在实际程序中,CPU高速缓存将受到代码其他部分的压力,任何对象的创建都会对GC产生下游影响,而JIT可能从您的其他部分内联和编译代码与您基准测试的代码冲突的代码。 不过,微型基准确实有其地位,如果您打算使用微型基准,那么最好还是与JMH一起正确地进行。

在最近的帖子中,我被要求执行测试以作为JMH性能基准。

JMH是用于构建,运行和分析以Java和其他针对JVM的其他语言编写的nano / micro / milli / macro基准测试的Java工具。 在此处查看完整文档。

JMH之所以如此出色,是因为它负责预热迭代,分派JVM进程,以使基准不会互相干扰,整理结果并以统一的方式呈现。 还有更多。

我听过很多有关JMH的信息,看到过许多JMH的结果,但我自己却从未真正运行过。 太简单了! 这就是我做的。

将这些依赖项添加到您的Maven pom.xml文件中:

<dependency>
            <groupId>org.openjdk.jmh</groupId>
            <artifactId>jmh-core</artifactId>
            <version>1.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.openjdk.jmh</groupId>
            <artifactId>jmh-generator-annprocess</artifactId>
            <version>1.5.1</version>
</dependency>

然后确定要进行基准测试的方法,并向其添加注释@Benchmark。 如果您需要任何初始化代码,请将其添加到应标记为@Setup的方法中。

运行基准测试的最简单方法是通过将此实现添加到您的main方法中来进行添加。 (请参见此处,了解其他运行测试的方法)。

public static void main(String[] args) throws RunnerException {
        Options opt = new OptionsBuilder()
                .include(MyBenchmark.class.getSimpleName())
                .forks(1)
                .build();

        new Runner(opt).run();
}

然后,就像在任何常规程序中一样运行,您将获得所有JMH的好处!

作为查看JMH基准测试格式的示例,我的结果如下所示:

Benchmark                                         Mode  Cnt     Score    Error  Units
CompTestBenchmark.bmCustomComparator             thrpt   20  2598.617 ± 67.634  ops/s
CompTestBenchmark.bmJDKComparator                thrpt   20   751.110 ± 14.835  ops/s
CompTestBenchmark.bmNoVTLComparator              thrpt   20  1348.750 ± 30.382  ops/s
CompTestBenchmark.bmNoVTLOrAutoBoxingComparator  thrpt   20  2202.995 ± 43.673  ops/s

有大量的花哨的技巧可以微调您的基准,我不会在这里讨论,但希望这能使您正常运行。

  • 有关我的测试的完整代码列表,请参见此处

翻译自: https://www.javacodegeeks.com/2015/02/jmh-setup-run-jmh-benchmark.html

jmh 基准测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值