Java Microbenchmark Harness (JMH)
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)相关推荐
- 在java中使用JMH(Java Microbenchmark Harness)做性能测试
文章目录 使用JMH做性能测试 BenchmarkMode Fork和Warmup State和Scope 在java中使用JMH(Java Microbenchmark Harness)做性能测试 ...
- 笔记-JMH(Java Microbenchmark Harness)
更多请移步我的博客 看开源项目时,时不常遇到一个叫做benchmark的目录,此时脑子停滞,一眼带过,最近一次看到就顺手问了下谷大哥,发现benchmark还是个挺有意思的东西. 基准测试是什么 基准 ...
- 基准测试神器 - JMH [ Java Microbenchmark Harness ]
Table of Contents 一. 简介 二. 安装 [ idea plug ] 三. 注解 @Benchmark @Warmup @Measurement @BenchmarkMode @Ou ...
- benchmark java_java使用JMH Java Microbenchmark Harness性能测试 | 程序那些事
在java中使用JMH(Java Microbenchmark Harness)做性能测试 JMH的全称是Java Microbenchmark Harness,是一个open JDK中用来做性能测试 ...
- benchmark java_在java中使用JMH(Java Microbenchmark Harness)做性能测试
JMH的全称是Java Microbenchmark Harness,是一个open JDK中用来做性能测试的套件.该套件已经被包含在了JDK 12中. 本文将会讲解如何使用JMH来在java中做性能 ...
- JMH(Java Microbenchmark Harness, java微基准测试工具)
JMH是什么 JMH是Java Microbenchmark Harness(java 微基准测试工具)的简称,是openJDK的一部分. JMH VS JMeter 看来简单比较下他们俩.JMete ...
- JMH(Java Microbenchmark Harness) Java微基准测试
官网:OpenJDK: jmh 什么是JMH?微基准测试,他是测的某一个方法的性能到底是好或者不好,换了方法的实现之后他的性能到底好还是不好 创建JMH测试 创建Maven项目,添加依赖,我们需要添加 ...
- Java基准测试工具JMH详解
Java基准测试工具JMH详解 1.JMH概述 1.1 JMH简介 1.2 JMH与JMeter区别 1.3 JMH注解说明 2.JMH验证 2.1 创建项目 2.2 引入依赖 2.3 启动异常解决 ...
- java5新特性_5分钟了解Java 12 八大新特性
导读:Java 12 终于发布了,我们一起来看一看 Java 12 中的新特性.通过本文可以在5分钟内快速了解 Java 12 新特性. 1 Switch 表达式 使用Java 12,switch不仅 ...
最新文章
- HDU - 5876 Sparse Graph 2016 ACM/ICPC 大连网络赛 I题 bfs+set+补图最短路
- 投稿2877篇,EMNLP 2019公布4篇最佳论文
- 2018 百越杯 pwn(Boring Game Write up)
- Axel与Wget下载工具
- 框架:servlet和MVC
- git日常提交使用的命令行
- ReactNative项目xcode打包运行报错整理
- mysql instead of触发_Instead of触发器
- GBDT、随机森林、xgboost算法原理解析视频公开
- 学渣的逆袭(各种暴力~)
- centos6.6编译安装lnmp系列之nginx
- 中燃料场报表生成器--出库报表
- 大数据与云计算学习:Python网络数据采集
- 什么是GPU,GPU怎么工作的,什么是图形的渲染,渲染怎么完成的。
- python 扯线木偶_年轻的50个细节
- 用python对某校园热水服务app进行测试,实现自动免费用水(仅供参考)
- Linux 服务器的安全保障,看看这些
- 英国电信第四财季利润大幅下滑 宣布裁员4000人
- PAT日志 1011
- 猜数字游戏 - Java实现