笔记-JMH(Java Microbenchmark Harness)

本文介绍了Java基准测试的重要性和JMH工具的使用,包括测试控制、测试维度、数据共享、数据准备、测试线程组和编译器控制等关键概念。通过JMH,开发者可以获取关于性能指标的详细信息,例如吞吐量、平均运行时间和冷启动性能。同时,文章还探讨了编译器优化如方法内敛和循环展开,并提到了分支预测的概念。
摘要由CSDN通过智能技术生成

更多请移步我的博客

看开源项目时,时不常遇到一个叫做benchmark的目录,此时脑子停滞,一眼带过,最近一次看到就顺手问了下谷大哥,发现benchmark还是个挺有意思的东西。

基准测试是什么

基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。
例如,对计算机CPU进行浮点运算、数据访问的带宽和延迟等指标的基准测试,可以使用户清楚地了解每一款CPU的运算性能及作业吞吐能力是否满足应用程序的要求;再如对数据库管理系统的ACID(Atomicity, Consistency, Isolation, Durability, 原子性、一致性、独立性和持久性)、查询时间和联机事务处理能力等方面的性能指标进行基准测试,也有助于使用者挑选最符合自己需求的数据库系统。

通过基准测试我们可以了解某个软件在给定环境下的性能表现,对使用者而言可以用作选型的参考,对开发者而言可以作为后续改进的基本参照。

JMH是什么

JMH(Java Microbenchmark Harness)是Java用来做基准测试一个工具,该工具由openJDK提供并维护,测试结果可信度较高,该项目官方还在持续更新中。

下面只是JMH简单描述,正所谓“纸上得来终觉浅,绝知此事要躬行”,要想全面了解还得读完官方给出的Demo或者看我的翻译注解版本的官方Demo

已经给标题加链接,直接戳标题即可闪现到例子。官方例子有37个,这里只列出了梗概。

举个例子

功能入门第一课,Hello World!

public class JMHSample_01_HelloWorld {
   

    @Benchmark
    public void wellHelloThere() {
   
        // this method was intentionally left blank.
    }

    public static void main(String[] args) throws RunnerException {
   
        Options opt = new OptionsBuilder()
                // 指明本次要跑的类
                .include(JMHSample_01_HelloWorld.class.getSimpleName())
                // fork JVM的数量
                .forks(1)
                .build();

        new Runner(opt).run();
    }

}

看下输出:

# JMH version: 1.21
# VM version: JDK 1.8.0_74, Java HotSpot(TM) 64-Bit Server VM, 25.74-b02
# VM invoker: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Contents/Home/jre/bin/java
# VM options: -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=51264:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8
# 预热配置
# Warmup: 5 iterations, 10 s each
# 检测配置
# Measurement: 5 iterations, 10 s each
# 超时配置
# Timeout: 10 min per iteration
# 测试线程配置
# Threads: 1 thread, will synchronize iterations
# 基准测试运行模式
# Benchmark mode: Throughput, ops/time
# 当前测试的方法
# Benchmark: com.cxd.benchmark.JMHSample_01_HelloWorld.wellHelloThere

# 运行过程的输出
# Run progress: 0.00% complete, ETA 00:01:40
# Fork: 1 of 1
# Warmup Iteration   1: 2924740803.993 ops/s
# Warmup Iteration   2: 2916472711.387 ops/s
# Warmup Iteration   3: 3024204715.897 ops/s
# Warmup Iteration   4: 3051723946.668 ops/s
# Warmup Iteration   5: 2924014544.301 ops/s
Iteration   1: 2909665054.710 ops/s
Iteration   2: 2989675862.826 ops/s
Iteration   3: 2965046292.629 ops/s
Iteration   4: 3020263765.220 ops/s
Iteration   5: 2929485177.735 ops/s

# 当前方法测试结束的报告
Result "com.cxd.benchmark.JMHSample_01_HelloWorld.wellHelloThere":
  2962827230.624 ±(99.9%) 171803440.922 ops/s [Average]
  (min, avg, max) = (2909665054.7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值