基准测试JMH

生成一个新的JMH工程的maven命令:

 mvn archetype:generate 
 -DinteractiveMode=false 
 -DarchetypeGroupId=org.openjdk.jmh 
 -DarchetypeArtifactId=jmh-java-benchmark-archetype 
 -DgroupId=com.enjoy.jmh
 -DartifactId=wl 
 -Dversion=1.0.0-SNAPSHOT

在命令后面加一个 -X 就可以查看到详细日志,执行上面命令后,会创建一个Maven工程,但是默认生成的MyBenchmark.java类
基准测试JMH

生成的项JmhTest,导入idea中
基准测试JMH
还需要增加一个jar包

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

项目打包jar包
基准测试JMH
基准测试JMH
运行jar包:java -jar benchmarks.jar
基准测试JMH
基准测试JMH
结果:
基准测试JMH
以上结果可以看出,这两个方法的执行时间基本上差不多,这是为什么呢,是因为锁消除呀(表情包)。
因为JIT(即时编译器)会对代码做了优化–锁消除,对于b方法来说,这把锁并没有什么鬼用,这对象o都逃离不了这个方法,如果有返回值的话就需要加锁,加不加锁都不影响是否有安全问题。一百个线程有一百个o对象。
基准测试JMH
synchronized还是有意义的,但也会很影响我们的性能。。。。

上一篇:多线程与高并发九-JMH及Disruptor


下一篇:Java中的map集合顺序如何与添加顺序一样