Java Microbenchmark Harness (JMH)

http://albertnetymk.github.io/2017/12/27/jmh/(此文档是安装过程)
https://github.com/openjdk/jmh (最新的jmh,上面的jmh似乎跑不起来)
官方推荐的测试java的函数性能的工具
jmh的使用guide:https://blog.csdn.net/lxbjkben/article/details/79410740

dependency

<dependencies><dependency><groupId>org.openjdk.jmh</groupId><artifactId>jmh-core</artifactId><version>${jmh.version}</version></dependency><dependency><groupId>org.openjdk.jmh</groupId><artifactId>jmh-generator-annprocess</artifactId><version>${jmh.version}</version><scope>provided</scope></dependency></dependencies>

例子:


public class MyBenchmark {@State(Scope.Thread)public static class MyState {Vector vector = new Vector();ArrayList<Integer> arrayList = new ArrayList<>();Integer[] arr = new Integer[10000];@Setuppublic void init() {for (int i = 0; i < 10000; i++) {vector.add(i);arrayList.add(i);arr[i] = i;}}}@Benchmarkpublic void testArrayList(MyState state){int i = state.arrayList.get(0);i = state.arrayList.get(1000);i = state.arrayList.get(8888);}@Benchmarkpublic void testArr(MyState state){int i = state.arr[0];i = state.arr[1000];i = state.arr[8888];}public static void main(String[] args) throws RunnerException {MyBenchmark mytest = new MyBenchmark();Options opt = new OptionsBuilder().include(MyBenchmark.class.getSimpleName()).warmupIterations(1).measurementIterations(1).forks(1).build();new Runner(opt).run();}
}

执行参数(生成机器执行汇编)

-Xcomp -XX:+UnlockDiagnosticVMOptions -XX:CompileCommand="print,*.mulTest" --add-modules jdk.incubator.vector

output:

# JMH version: 1.33
# VM version: JDK xxxx, OpenJDK 64-Bit Server VM, 17-xxxx+3-167
# VM invoker: /home/xxx/jdk/jdk-17/bin/java
# VM options: --add-modules=jdk.incubator.vector -javaagent:/home/xxxx/idea/idea-IC-/lib/idea_rt.jar=39765:/home/xxxx/idea/idea-IC-bin -Dfile.encoding=UTF-8
# Blackhole mode: full + dont-inline hint (default, use -Djmh.blackhole.autoDetect=true to auto-detect)
# Warmup: 1 iterations, 10 s each
# Measurement: 1 iterations, 10 s each
# Timeout: 10 min per iteration
# Threads: 1 thread, will synchronize iterations
# Benchmark mode: Throughput, ops/time
# Benchmark: org.sample.MyBenchmark.testArr# Run progress: 0.00% complete, ETA 00:00:40
# Fork: 1 of 1
WARNING: Using incubator modules: jdk.incubator.vector
# Warmup Iteration   1: 587528394.545 ops/s
Iteration   1: 588012492.451 ops/sResult "org.sample.MyBenchmark.testArr":588012492.451 ops/s# JMH version: 1.33
# VM version: JDK 17-xxxx, OpenJDK 64-Bit Server VM, 17-xxxx+3-167
# VM invoker: /home/xxxx/jdk/jdk-17/bin/java
# VM options: --add-modules=jdk.incubator.vector -javaagent:/home/xxxxx/idea/idea-IC-lib/idea_rt.jar=39765:/home/ziyi/idea/idea-IC-/bin -Dfile.encoding=UTF-8
# Blackhole mode: full + dont-inline hint (default, use -Djmh.blackhole.autoDetect=true to auto-detect)
# Warmup: 1 iterations, 10 s each
# Measurement: 1 iterations, 10 s each
# Timeout: 10 min per iteration
# Threads: 1 thread, will synchronize iterations
# Benchmark mode: Throughput, ops/time
# Benchmark: org.sample.MyBenchmark.testArrayList# Run progress: 50.00% complete, ETA 00:00:20
# Fork: 1 of 1
WARNING: Using incubator modules: jdk.incubator.vector
# Warmup Iteration   1: 338121260.976 ops/s
Iteration   1: 339601119.490 ops/sResult "org.sample.MyBenchmark.testArrayList":339601119.490 ops/s# Run complete. Total time: 00:00:41REMEMBER: The numbers below are just data. To gain reusable insights, you need to follow up on
why the numbers are the way they are. Use profilers (see -prof, -lprof), design factorial
experiments, perform baseline and negative tests that provide experimental control, make sure
the benchmarking environment is safe on JVM/OS/HW level, ask for reviews from the domain experts.
Do not assume the numbers tell you what you want them to tell.Benchmark                   Mode  Cnt          Score   Error  Units
MyBenchmark.testArr        thrpt       588012492.451          ops/s
MyBenchmark.testArrayList  thrpt       339601119.490          ops/s

我们发现直接使用数组比使用ArrayList的ops更高,说明当数组长度已知时直接使用数组效率更高。

Java Microbenchmark Harness (JMH)相关推荐

  1. 在java中使用JMH(Java Microbenchmark Harness)做性能测试

    文章目录 使用JMH做性能测试 BenchmarkMode Fork和Warmup State和Scope 在java中使用JMH(Java Microbenchmark Harness)做性能测试 ...

  2. 笔记-JMH(Java Microbenchmark Harness)

    更多请移步我的博客 看开源项目时,时不常遇到一个叫做benchmark的目录,此时脑子停滞,一眼带过,最近一次看到就顺手问了下谷大哥,发现benchmark还是个挺有意思的东西. 基准测试是什么 基准 ...

  3. 基准测试神器 - JMH [ Java Microbenchmark Harness ]

    Table of Contents 一. 简介 二. 安装 [ idea plug ] 三. 注解 @Benchmark @Warmup @Measurement @BenchmarkMode @Ou ...

  4. benchmark java_java使用JMH Java Microbenchmark Harness性能测试 | 程序那些事

    在java中使用JMH(Java Microbenchmark Harness)做性能测试 JMH的全称是Java Microbenchmark Harness,是一个open JDK中用来做性能测试 ...

  5. benchmark java_在java中使用JMH(Java Microbenchmark Harness)做性能测试

    JMH的全称是Java Microbenchmark Harness,是一个open JDK中用来做性能测试的套件.该套件已经被包含在了JDK 12中. 本文将会讲解如何使用JMH来在java中做性能 ...

  6. JMH(Java Microbenchmark Harness, java微基准测试工具)

    JMH是什么 JMH是Java Microbenchmark Harness(java 微基准测试工具)的简称,是openJDK的一部分. JMH VS JMeter 看来简单比较下他们俩.JMete ...

  7. JMH(Java Microbenchmark Harness) Java微基准测试

    官网:OpenJDK: jmh 什么是JMH?微基准测试,他是测的某一个方法的性能到底是好或者不好,换了方法的实现之后他的性能到底好还是不好 创建JMH测试 创建Maven项目,添加依赖,我们需要添加 ...

  8. Java基准测试工具JMH详解

    Java基准测试工具JMH详解 1.JMH概述 1.1 JMH简介 1.2 JMH与JMeter区别 1.3 JMH注解说明 2.JMH验证 2.1 创建项目 2.2 引入依赖 2.3 启动异常解决 ...

  9. java5新特性_5分钟了解Java 12 八大新特性

    导读:Java 12 终于发布了,我们一起来看一看 Java 12 中的新特性.通过本文可以在5分钟内快速了解 Java 12 新特性. 1 Switch 表达式 使用Java 12,switch不仅 ...

最新文章

  1. HDU - 5876 Sparse Graph 2016 ACM/ICPC 大连网络赛 I题 bfs+set+补图最短路
  2. 投稿2877篇,EMNLP 2019公布4篇最佳论文
  3. 2018 百越杯 pwn(Boring Game Write up)
  4. Axel与Wget下载工具
  5. 框架:servlet和MVC
  6. git日常提交使用的命令行
  7. ReactNative项目xcode打包运行报错整理
  8. mysql instead of触发_Instead of触发器
  9. GBDT、随机森林、xgboost算法原理解析视频公开
  10. 学渣的逆袭(各种暴力~)
  11. centos6.6编译安装lnmp系列之nginx
  12. 中燃料场报表生成器--出库报表
  13. 大数据与云计算学习:Python网络数据采集
  14. 什么是GPU,GPU怎么工作的,什么是图形的渲染,渲染怎么完成的。
  15. python 扯线木偶_年轻的50个细节
  16. 用python对某校园热水服务app进行测试,实现自动免费用水(仅供参考)
  17. Linux 服务器的安全保障,看看这些
  18. 英国电信第四财季利润大幅下滑 宣布裁员4000人
  19. PAT日志 1011
  20. 猜数字游戏 - Java实现

热门文章

  1. Java之-springboot
  2. telnet怎么算成功_男人一生怎么才算成功?
  3. 解决IDEA报错:Could not find resource mybatis-config.xml
  4. <img>标签中alt属性和title属性的区别
  5. 爬虫日记之07正则表达式(手把手教你区分贪婪匹配和惰性匹配)
  6. Linux 下实现虚拟专用网(PPTP)
  7. 洗稿,技术上怎么判断文章相似性?
  8. 小米4C 安装Xposed框架失败解决方案
  9. css中2D转换效果实现(4)
  10. gateway官网解读(四)